Nib, но не получил UITableView
Мое приложение работает для iOS 5.1, но для симулятора iOS 6 появляется следующая ошибка.
Завершение приложения из-за неперехваченного исключения 'NSInternalInconsistencyException', причина: '- [UITableViewController loadView] загрузил наконечник "MainListViewController", но не получил UITableView.
Я подклассифицирую UITableViewController
, и я не хочу его менять.
Конструкция таблицы создается программно, для загрузки из Mainwindow.xib
Tab Bar Controller имеется манекен MainListViewController.xib
.
Я также попытался удалить MainListViewController.xib
, удалить его из Mainwindow.xib
Tab Bar Controller, создал MainListViewController
в AppDelegate и добавил его в Control Bar Controller как UITabBarItem
, чтобы избавиться от этой проблемы с nib, но Я все равно получаю ту же ошибку.
Ответы
Ответ 1
Если у вас есть NIB для подкласса UITableViewController
, то его выход view
должен быть подключен к UITableView
.
Вы правы, чтобы удалить MainListViewController.xib
и сделать все это в коде, но причина, по которой он не работал для вас, заключается в том, что старый XIB не будет удален при сборке и запуске. Итак, удалите приложение из симулятора и повторите попытку. Он должен работать тогда.
Ответ 2
У меня была аналогичная проблема с использованием раскадровки. Я отправлю свое решение на благо других. Ключ в том, что если вы правильно установили владельца файла в подкласс UITableView, вам все равно нужно убедиться, что свойство вида установлено в представление таблицы. Я использую раскадровки, но то же самое относится и к ножам. Разверните "контур документа", чтобы вы могли видеть иерархию вашей раскадровки. Я включу некоторые снимки экрана ниже. Быстрый способ решить эту проблему заключается в том, что вы хотите посмотреть свое мнение в контуре документа. Удалите любой вид таблицы, который у вас есть в качестве дочернего элемента. Перетащите другое представление таблицы поверх свойства вида. Готово. Я покажу вам снимки экрана.
![enter image description here]()
Обратите внимание на две таблицы. Вы хотите удалить таблицу1 и ее ячейку.
![enter image description here]()
Хорошо. Теперь перетащите таблицу2 в представление, и все готово. Должен работать сейчас. В принципе, если у вас есть подкласс UITableViewController, тогда он должен иметь вид таблицы вместо вида или он будет сбой.
![enter image description here]()
Ответ 3
Причина может быть:
.h проверьте, что это подкласс UIViewController. это решит проблему.
Ответ 4
Короче говоря, вы настраиваете подклассу UITableViewController для UIViewController!!
Ты не сможешь это сделать. Вы должны дать UIViewController подкласс UIViewController.
Ответ 5
Я нахожу решение при использовании Storyboards и 1 Table View.
Ключом является создание пользовательского класса (newViewController) только для проверки подкласса UITableViewController. После создания Перейдите к контроллеру табличного представления (нашей таблицы) и в Identity Inspector выберите пользовательский класс, который только что был создан (newViewController).
Это работает для меня. Надеюсь, что мой комментарий поможет кому-то.
Ответ 6
Существует несколько причин, почему это может произойти.
-
Возможно, у вас не было добавлено UITableViewDelegate и UITableViewDataSource для вашего .h
@interface TableController: UIViewController {
-
Возможно, вы не подключили свои объявленные выходы к компонентам в раскадровке /Nib
-
Возможно, вы вызываете UIViewController вместо UITableView или видеоигры в своем .h
@interface TableController : UIViewController
или
@interface TableController : UITableViewController
Ответ 7
Пожалуйста, подключите представление таблицы, так как View outlet.outlet должен быть подключен к UITableView.
Ответ 8
Если вы используете UITableView в качестве своего верхнего вида.
Вот так:
![введите описание изображения здесь]()
Вам нужно использовать UITableViewController в вашем контроллере
class ItemsViewController: UITableViewController
Если вы используете UITableView под представлением в своем Storyboatd.
Вот так:
![введите описание изображения здесь]()
Вам нужно использовать UITableViewDelegate и UITableViewDataSource с UIViewController
class ItemsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
Ответ 9
У меня была эта проблема, и решение было всего лишь одной простой задачей.
Держите наконечник, если вы уже создали...
Перейдите в (файл XIB) и добавьте компонент tableView из библиотеки объектов на экран iPhone XIB файла, и он должен работать:)
Ответ 10
Это сработало для меня. Надеюсь, это поможет вам.
В AppDelegate →
#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]()
Ответ 11
Я также столкнулся с этой проблемой, но я использовал раскадровку в xcode 6.2. Я удалил соответствующий вид из раскадровки и перетащил контроллер табличного представления из библиотеки объектов в раскадровку, затем он работает.
Ответ 12
@smileBot ответ помог мне понять, что решение очень просто, и ошибка, вызванная iOS, имеет смысл
Завершение приложения из-за неперехваченного исключения 'NSInternalInconsistencyException', причина: '- [UITableViewController loadView] загрузил наконечник "MainListViewController", но не получил UITableView.
В основном они говорят, что контроллер nib view не возвращает UITableView, потому что это не так, для большинства - ваш nib возвращает View - который создается для вас по умолчанию при создании нового ViewController в среде Xcode.
Решение так же просто, как удаление Вид, которое может сравниться с нормой, но выберите его и нажмите "Назад", а затем перетащите UITableView внутри вашего ViewController, и этот UITableView теперь будет выступать в качестве корневого представления внутри вашего TableViewController.
Имейте в виду, что это необходимо только для классов, непосредственно подклассифицирующих UITableViewController.
Удачи.
Ответ 13
У меня такая же проблема, и после траты 3 часа я это выясню... "это ошибка". Я использую класс tableviewcontroller и даю ссылку на uiviewcontroller этого класса, вместо класса контроллера класса я беру класс tableviewcontroller, когда принимаю uiviewcontroller в раскадровки. поэтому удалите класс tableviewcontroller и вставьте свой код класса tableviewcontroller, чтобы просмотреть класс контроллера, "не вставляйте весь код только вставить логику", после этого в раскадровке в инспекторе идентификации дайте ссылку на класс текущего класса контроллера вида.