Предисловие : Я новичок в iPhone SDK, Obj-C, Интерфейсном Разработчике и Какао. Я, вероятно, делаю что-то явно не так.
Вопрос :
У меня есть UITableView
, который падает, если я прокручиваю его. Он будет немного прокручиваться, чтобы показать полную ячейку самой нижней половины скрытой ячейки, но не будет загружать следующую. Точно так же, если я прокручиваю верхнюю часть, чтобы полностью скрыть самую нижнюю ячейку, и она резиновыми полосами возвращается, чтобы показать эту ячейку, она вылетит, прежде чем показывать ее. Это кажется мне странным, потому что правильно рисует первые 7 из 11 ячеек. Данные ячейки находятся в NSArray
, в UITableViewController
, связанном как dataSource
и delegate
для UITableView
в Интерфейсном Разработчике. Работает при инициализации представления.
Я делаю приложение, которое, как я думал, я бы сделал 2 дня назад, просто вычисляет комбинации и отображает их список в удобном для меня виде таблицы прокрутки. Сейчас он даже не вычисляет все, NSArray
в DataSource
инициализируется один раз с некоторыми строками, такими как @"Hello"
и @"World"
.
Шаги для воспроизведения :
Поскольку я использую IB, я не могу точно показать вам полную историю в коде. Поэтому я опишу то, что я сделал до сих пор, и надеюсь, что это не заставит вас спать.
Сделал новое «Приложение панели вкладок» в XCode, потому что я хочу 2 вкладки, и я не хочу ни панель навигации, ни полноэкранную таблицу. Я переместил представление первой вкладки MainWindow.xib
в FirstView.xib
как аналог данного SecondView.xib
. Это сработало хорошо. Я изменил представление так, чтобы оно содержало два UITextField
s для ввода и 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
, поэтому я ' Я смущен тем, почему он сбился с пути и куда он в итоге пошел.
Обновление : Спасибо за ответы и комментарии. Кажется, моя проблема заключается в том, что CombinationsTableViewController
(подкласс UITableViewController
) фактически не создается в каком-либо конкретном месте моего кода. Он создается как некоторое время (когда загружен FirstView.xib
) и, по-видимому, управляется, пока начальный tableView заполнен 7 ячейками, а затем освобождается. Поэтому мне нужно определить, где / как сделать сохраненную ссылку на этот контроллер. У моего Application Delegate
, вероятно, должна быть какая-то розетка с этим контроллером, которую можно связать как экземпляр, который находится в xib
. Да, я новичок в этом. Я знаю, что мог бы просто устранить эти проблемы, избегая IB и делая вещи явно в коде, но я решил, что хочу научиться гибко использовать IB.
Наконец : Да, мне нужен был сохраненный экземпляр контроллера табличного представления. Звучит элементарно, но это не было понятно при работе с МБ, как у меня. Прочитайте мой собственный пост для всего процесса и исправьте.
В сторону : Либо отладчику нужны подробные инструкции (любые ссылки приветствуются), либо он работает не очень хорошо. Кажется, я получаю больше информации быстрее, позволяя приложению аварийно завершить работу и прочитав отчет, который он генерирует. Но это требует утомительного завершения, повторного запуска и 3 кликов. Я действительно хотел перейти от этого к подключению входных данных, выполнению расчетов и обновлению таблицы при каждом изменении. Это должно быть трудной частью, а не заставлять элемент фреймворка работать.
Дальнейшие разговоры : все это было в iPhone SDK для 2.2.1. В то время iPhone OS 3.0 без бета-версии еще не была доступна без вступления в клуб за холодные наличные. Я ожидал, что это будет на открытии WWDC 2009, но фактически сегодня (17 июля 2009 года) был выпущен бесплатный публичный 3.0 SDK.