UITableView выходят при использовании отдельного делегата/источника данных

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

54
задан Emil 11 March 2012 в 00:17
поделиться

3 ответа

Я выполнил Ваши шаги, воссоздал проект и столкнулся с той же проблемой. В основном Вы почти там. Существует 2 вещи, отсутствующие (когда-то зафиксировал, это работает):

  • необходимо соединиться tableView из TableTestTableViewController к UITableView, Вы имеете на экране. Как я сказал, прежде, потому что это не IBOutlet, можно переопределить tableView свойство и сделать его и IBOutlet:

    @interface TableTestTableViewController : UITableViewController {
        UITableView *tableView;
    }
    
    @property (nonatomic, retain) IBOutlet UITableView *tableView;
    
  • Следующая вещь состоит в том, чтобы добавить ссылку на TableTestTableViewController и сохранить ее в TableTestViewController. Иначе Ваш TableTestTableViewController может быть выпущен (после того, как, загружая перо ничем держащимся за него.) и именно поэтому Вы видите ошибочные результаты, катастрофические отказы или ничто показ. Чтобы сделать, которые добавляют:

    @interface TableTestViewController : UIViewController {
        TableTestTableViewController *tableViewController;
    }
    
    @property (nonatomic, retain) IBOutlet TableTestTableViewController  *tableViewController;
    

    и подключение это в Интерфейсном Разработчике к TableTestTableViewController экземпляр.

С вышеупомянутым это хорошо работало на моей машине.

Также я думаю, что было бы хорошо указать мотивацию позади всего этого (вместо того, чтобы просто использовать UITableViewController с его собственным UITableView). В моем случае это должно было использовать другие представления что просто UITableView на том же, экранном из содержания. Таким образом, я могу добавить другой UILabels или UIImages под [1 117] и показать UITableView под ними или выше их.

23
ответ дан Jason Plank 7 November 2019 в 08:11
поделиться

Я просто провел много часов, вытягивая мои волосы, пытаясь выяснить, почему UITableView не обнаружится когда, когда у меня был встроенный в отдельное перо вместо в основном пере. Я наконец нашел Ваше обсуждение выше и понял, что это было, потому что мой UITableViewController не сохранялся! По-видимому, делегат и свойства источника данных UITableView не отмечены, "сохраняют" и таким образом, мое перо загружалось, но контроллер становился брошенным... И из-за чудес цели-c я добрался никакой сообщения об ошибках вообще от этого... Я все еще не понимаю, почему это не отказало. Я знаю, что видел "сообщение, отправленное в выпущенный xxx" прежде..., почему это не было дающий мне один из тех?!?

я думаю, что большинство разработчиков предположило бы, что структура, которую они создают в интерфейсном разработчике, считалась бы в некотором большем контексте (Перо) и не подвергающаяся выпуску. Я предполагаю, что знаю, почему они делают это.. так, чтобы iPhone мог отбросить и перезагрузить части пера на низкой памяти. Но человек, которого было трудно выяснить.

кто-то может сказать мне, где я должен был читать о том поведении в документах?

Также - о присоединении представление. Во-первых, если Вы опозорите один от разработчика UI, то Вы будете видеть, что они поднимают трубку свойство представления (который является IBOutlet) к табличному представлению. Не необходимо представить эти tableView, который, кажется, установлен внутренне. На самом деле это, даже кажется, не необходимо установить представление, если Вы не хотите viewDidLoad уведомление. Я только что повредил соединение представления между моим uitableview и uitableviewcontroller (только делегат и набор источника данных), и это, по-видимому, хорошо работает.

5
ответ дан pablasso 7 November 2019 в 08:11
поделиться

Да по некоторым причинам (вмешайтесь, если кто-либо знает, почему...) tableView свойство эти UITableViewController не представлено как IBOutlet даже при том, что это - общественная собственность. Таким образом, при использовании Интерфейсного Разработчика Вы не видите что свойство для соединения с другим UITableView. Таким образом в Вашем подклассе, можно создать tableView свойство, отмеченное как IBOutlet и подключение это.

это все кажется hacky и обходным решением мне, но это, кажется, единственный способ отделиться UITableViewController's UITableView и поместить его где-то в другом месте в иерархию UI. Я столкнулся с той же проблемой, когда я попробовал к режиму конструктора, где существуют вещи кроме UITableView, и это было способом, которым я решил его... Действительно ли это - правильный подход???

3
ответ дан pablasso 7 November 2019 в 08:11
поделиться