Подтвердить что ты не робот

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, но Я все равно получаю ту же ошибку.

4b9b3361

Ответ 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, чтобы просмотреть класс контроллера, "не вставляйте весь код только вставить логику", после этого в раскадровке в инспекторе идентификации дайте ссылку на класс текущего класса контроллера вида.