перо, но не получил UITableView

Мое приложение работает для iOS 5.1, но для симулятора iOS 6 я получаю следующую ошибку.

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UITableViewController loadView] loaded the "MainListViewController" nib but didn't get a UITableView.'

Я подклассUITableViewController и я не хочу его менять.

Табличное представление создано программно, есть манекенMainListViewController.xib загрузить изMainwindow.xib Контроллер панели вкладок.

Я тоже пытался удалитьMainListViewController.xibудалите его изMainWindow.xib Контроллер панели вкладок, созданныйMainListViewController в AppDelegate и добавил его в контроллер панели вкладок какUITabBarItem чтобы избавиться от этой проблемы, но я все еще получаю ту же ошибку.

 CodaFi27 июн. 2012 г., 10:03
Куда загружается ваша таблица? И это устанавливается на просмотр розетки / собственности
 irmu27 июн. 2012 г., 10:50
Он загружается в viewDidLoad, во второй версии (которая программно добавляет UITabBarItem) для него не установлено значение outlet / свойство.

Ответы на вопрос(13)

Как это :

enter image description here

Вам нужно использовать UITableViewController в вашем контроллере

class ItemsViewController: UITableViewController

Если вы используете UITableView под View в вашем Storyboatd.

Как это :

enter image description here

Вам нужно использовать UITableViewDelegate и UITableViewDataSource с UIViewController

class ItemsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource

В AppDelegate - & gt;

#import "TableViewController.h" // name of your TableViewController class

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//PUT
TableViewController *controller = [[TableViewController alloc]
                                  initWithStyle:UITableViewStylePlain];
    self.window = [[UIWindow alloc]
                   initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = controller;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    // Override point for customization after application launch.
    return YES;
}

Убедитесь, что в раскадровке ваш контроллер представления указывает на этот класс:

Story Board

Сохраните перо, если вы уже создали ...

Перейдите к (файл XIB) и добавьте компонент tableView из библиотеки объектов на экран iPhone файла XIB, и он должен работать :)

You may have not have added UITableViewDelegate & UITableViewDataSource to your .h

@interface TableController : UIViewController {

You may have not connected your declared outlets to the components in the Storyboard/Nib

You maybe calling a UIViewController instead of a UITableView or vide verser in your .h

@interface TableController : UIViewController

или же

 @interface TableController : UITableViewController 

свое решение на благо других. Ключевым моментом является то, что если вы правильно установили владельца файла на подкласс UITableView, вам все равно нужно убедиться, что для свойства view установлено значение Table View. Я использую раскадровки, но то же самое должно относиться и к перьям. Разверните «Схему документа». так что вы можете увидеть иерархию вашей раскадровки. Я включу несколько снимков экрана ниже. Самый быстрый способ решить эту проблему заключается в том, что вы хотитеview в структуре документа. Удалите все таблицы, которые у вас есть, как дочерние. Перетащите другой вид таблицы поверх свойства view. Готово. Я покажу вам снимки экрана.

enter image description here

Обратите внимание на две таблицы. Вы хотите удалить table1 и его ячейку.

enter image description here

Хорошо. Теперь перетащите table2 в представление, и все готово. Должен работать сейчас. В основном, если у вас есть подкласс UITableViewController, тогда он должен иметь табличное представление вместо представления, иначе произойдет сбой.

enter image description here

 27 мая 2014 г., 04:16
@cocoanut извините, мне нужен был "статический размер" scrollview (горизонтальная прокрутка) поверх динамического прототипа таблицы. Не уверен, что если я последую вашему примеру, сможете ли вы расширить UITableViewController и изменить его размер tableView, чтобы он занимал, скажем, нижние 50% экрана?
 26 мая 2014 г., 23:11
Столкнулся с этим, когда я хотел получить представление статического размера над табличным представлением, что кажется невозможным (без изменения размера вида сверху) при создании подкласса UITableViewController. Ваш ответ убедил меня, что вместо этого я должен был создать подкласс UIViewController. Затем я подключил свой собственный экземпляр UITableView. Спасибо!
 27 мая 2014 г., 01:29
@owenfi Если вам нужен tableViewController, вы всегда можете использовать встроенный. Поэтому, если вы выполняете статическое табличное представление, это должен быть tableViewController. Здесь вы можете обойти проблемы с помощью встроенного tableViewController. Я использую их все время.
 29 июн. 2015 г., 03:00
Сначала я не поняла этот ответ, поэтому, чтобы уточнить для других:Table View должен быть ребенкомActivitiesTVC - Activities узел, а не ребенокView
 24 февр. 2014 г., 03:52
Отлично работает в xcode 5

.h файл проверить, что это подкласс UIViewController. это решит проблему.

но я использовал раскадровку в xcode 6.2. Я удалил соответствующий вид из раскадровки и перетащил контроллер табличного представления из библиотеки объектов в раскадровку, после чего он заработал.

что решение очень простое, и ошибка, возникающая в iOS, имеет смысл

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UITableViewController loadView] loaded the "MainListViewController" nib but didn't get a UITableView.'

Они в основном говорят, что контроллер представления nib не возвращает UITableView, потому что это не так, для большинства - ваш nib возвращаетView - который создается для вас по умолчанию, когда вы создаете новый ViewController в Xcode IDE.

Решение так же просто, как удалениеView - что может показаться противоречащим норме - но продолжайте выбирать его и возвращать назад - затем перетащите UITableView внутри вашего ViewController, и этот UITableView теперь будет действовать как ваш корневой вид внутри вашего TableViewController.

Имейте в виду, что это необходимо только для классов, непосредственно наследующих UITableViewController.

Удачи.

Решение Вопроса

UITableViewController подкласс, то егоview выходmust быть подключенным кUITableView.

Вы имеете право удалитьMainListViewController.xib и делать все это в коде, но причина, по которой он не работает для вас, заключается в том, что старый XIB не будет удален при сборке & amp; запустить. Итак, удалите приложение из симулятора и попробуйте снова. Это должно работать тогда.

 19 февр. 2013 г., 03:25
Я не понимаю, если xib-файл нигде не используется для инициализации подкласса UITableViewController, почему это вообще будет проблемой? Это звучит как ошибка XCode или что-то ... в любом случае, я удалил XIB-файл, очистил проект, и он не работал, но после удаления старого приложения он заработал.
 20 февр. 2013 г., 08:02
@mattjgalloway ты прав. моя проблема в другом, я создал контроллер с XIB, но позже я решил не использовать его, но та же ошибка ...
 30 янв. 2013 г., 19:22
очень полезный ответ, большое спасибо!
 irmu27 июн. 2012 г., 11:07
Спасибо! Я удалил старое приложение, очистил проект и закрыл симулятор iOS, теперь работает версия без файла .xib.
 19 февр. 2013 г., 21:00
@xuhuanze - Но в этом суть этого вопроса - NIB использовался для инициализации подклассаUITableViewController, Если у вас что-то другое, то это не тот вопрос, на который вы должны смотреть.

вы устанавливаете пользовательский подкласс UITableViewController в UIViewController !! Ты не сможешь это сделать. Вы должны дать UIViewController подкласс UIViewController.

и через три часа я узнаю об этом ... "Это ошибка" я использую класс tableviewcontroller и даю ссылку на этот класс для uiviewcontroller, вместо класса контроллера представления я беру класс tableviewcontroller, как я использую uiviewcontroller в раскадровке. поэтому удалите класс tableviewcontroller и вставьте свой код класса tableviewcontroller, чтобы просмотреть класс контроллера, "не вставляйте весь код, только вставьте логику" & quot; после этого в раскадровке в инспекторе идентичности укажите ссылку на текущий класс контроллера представления.

Ключ в том, что когда вы создаете пользовательский класс (newViewController), просто убедитесь, что он является подклассом UITableViewController. После создания перейдите к контроллеру табличного представления (нашей таблицы) и в Identity Inspector выберите пользовательский класс, который только что был создан ранее (newViewController).

Это подходит для меня. Надеюсь, мой комментарий поможет кому-то.

подключите ваш табличный вид как View outlet.outlet должен быть подключен к UITableView.

Ваш ответ на вопрос