Предисловие. Я новичок в iPhone SDK, Obj-C, Interface Builder и Cocoa. Я, вероятно, делаю что-то явно неправильное.
Вопрос:
У меня есть UITableView
, который падает, если я прокручиваю его. Он немного прокрутит, чтобы показать полную ячейку нижней половины скрытой ячейки, но не загрузит следующую. Точно так же, если я прокручиваю верхнюю часть, чтобы полностью скрыть нижнюю часть ячейки, и резиновые ленты вернутся, чтобы показать эту ячейку, она будет разбиваться, прежде чем показывать ее. Это кажется мне странным, потому что он правильно рисует первые 7 из 11 ячеек. Данные ячейки находятся в NSArray
, в UITableViewController
, связанных как как dataSource
, так и delegate
для UITableView
в Interface Builder. Он работает, когда представление инициализируется.
Я создаю приложение. Я думал, что мне будет сделано 2 дня назад, которое просто вычисляет комбинации и отображает их список в том, что, по моему мнению, было бы удобным просмотром таблицы прокрутки. Прямо сейчас, он даже не вычисляет все, NSArray
в dataSource
инициализируется один раз с некоторыми строками типа @"Hello"
и @"World"
.
Шаги по воспроизведению: Поскольку я использую IB, я не могу точно показать вам всю историю в коде. Поэтому я расскажу, что я сделал до сих пор, и надеюсь, что это не сделает вас сонными.
Создал новое приложение "Tab Bar Application" в Xcode, потому что мне нужно 2 вкладки, и мне не нужна панель навигации или полноэкранная таблица. Я переместил представление первой вкладки MainWindow.xib
в FirstView.xib
как аналог данного SecondView.xib
. Это сработало хорошо. Я изменил представление, чтобы содержать два UITextField
для входов, и UITableView
для вывода. Это работало, но таблица была пустой. Я подклассифицировал UITableViewController
, в котором я заполнил свойство NSArray
с именем combinations
с помощью 11 строк, а затем добавил
// Set up the cell...
cell.userInteractionEnabled = NO;
cell.text = [combinations objectAtIndex:indexPath.row];
где был только комментарий. В IB я добавил Table View Controller
в FirstView.xib
и установил его имя класса в соответствие с именем этого нового подкласса и перетащил Table View
на мой взгляд на этот Combinations Table View Controller
дважды. После связывания dataSource
и после delegate
. Хотя я получаю такое же поведение, если привязан только к dataSource
.
Это выполняется и заполняет таблицы видимыми строками (6.5) с помощью первых 7 значений в dataSource
combinations
. Я могу прокрутить 0.5 ячейки вниз, а затем вернуться обратно. Но если я прокручу более 0,5 ячеек вверх или вниз, приложение выйдет из строя. Объяснение в отчете гласит:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** -[NSCFTimer tableView:cellForRowAtIndexPath:]:
unrecognized selector sent to instance 0x52ca40'
Я не делал NSCFTimer
и не связывал его с моим Table View
, я подозреваю, что cellForRowAtIndexPath
- это именно сообщение, которое должно было отправиться на мой dataSource
или delegate
, поэтому я ' m запутался в том, почему он сбился с пути и где он закончился.
Обновить. Спасибо за ответы и комментарии. Моя проблема заключается в том, что CombinationsTableViewController
(подкласс UITableViewController
) на самом деле не создан каким-либо конкретным местом в моем коде. Он создается как некоторое время (когда загружается FirstView.xib
) и, по-видимому, управляется, в то время как начальный tableView заполняется 7 ячейками и затем освобождается. Поэтому мне нужно определить, где/как сделать сохраненную ссылку на этот контроллер. Мой Application Delegate
должен, вероятно, иметь некоторый выход, который содержит этот контроллер, который может быть связан как экземпляр, который находится в xib
. Да, я новичок в этом. Я знаю, что я мог бы просто устранить эти проблемы, избегая IB и делая вещи явно в коде, но я полагаю, что хочу научиться гибко использовать IB.
Наконец: Да, мне нужен сохранившийся экземпляр контроллера табличного представления. Это звучит элементарно, но это было непонятно при работе с IB, как у меня. Прочитайте мой собственный пост для всего процесса и исправьте.
Помимо: либо отладчик нуждается в подробных инструкциях (любые ссылки оцениваются), либо он работает не очень хорошо. Кажется, я быстрее получаю больше информации, позволяя аварийному завершению работы приложения и чтению отчета, который он создает. Но для этого требуется утомительное завершение, перезапуск и 3 щелчка. Я действительно хотел перейти от этого к подключению входов, выполнению вычислений и обновлению таблицы при каждом изменении. Это должно быть тяжелой частью, а не тем, что делает работу члена фреймворка.
Дальнейшее движение: все это было в iPhone SDK для версии 2.2.1. В то время iPhone OS 3.0 не бета-версия еще не была доступна, не вступая в клуб за холодные наличные деньги. Я ожидал, что он будет открыт на WWDC 2009, но на самом деле сегодня (17 июля 2009 года) был выпущен бесплатный общедоступный 3.0 SDK.