#iphone #uitableview
#iPhone #uitableview
Вопрос:
Кто-нибудь успешно использовал этот класс для загрузки пользовательских TableViewCells. Я попытался создать синглтон класса ViewFactory и загрузить ячейки, используя общий экземпляр, но я получаю следующую ошибку…
Завершение работы приложения из-за неперехваченного исключения ‘NSInvalidArgumentException’, причина: ‘ [ViewFactory sharedMyClassName]: нераспознанный селектор, отправленный в класс 0x32a24’
Я использую этот макрос для создания синглтона, и, следуя приведенному руководству, у кого-нибудь был опыт работы с этим раньше? Я понимаю, что это может быть рискованно, но если кто-нибудь когда-либо использовал это, пожалуйста, дайте мне знать.
Большое спасибо
Жюль
Ответ №1:
Единственная причина, по которой класс ViewFactory является одноэлементным, заключается в том, что вы можете получить к нему глобальный доступ. Было бы тривиально взять фрагмент кода в ViewFactory, который выполняет полезную работу, и включить его в свой собственный подкласс контроллера табличного представления. Это устранило бы синглтон, упростило бы использование отдельных элементов для каждой таблицы и (IMO) упростило бы ваш код.
Другой подход, который хорошо работает, заключается в том, чтобы поместить ячейки каждого типа в отдельный раздел и использовать -loadNibNamed:owner:options: для загрузки ячеек по мере необходимости. Метод описан в разделе Загрузка пользовательских ячеек табличного представления из файлов Nib. Это не сложно, и хотя в примере в этом разделе используется только один тип пользовательской ячейки, его легко экстраполировать на несколько пользовательских ячеек.
Ответ №2:
define
Создает метод, вызываемый sharedViewFactory
, а не sharedMyClassName
нет. Это зависит от имени класса, которое вы ему передаете. shared
добавляется к имени класса. Таким образом, все ##classname
будут заменены на ViewFactory
.
Комментарии:
1. ах, спасибо вам за эту … глупую ошибку с моей стороны, хотя теперь у меня есть следующий сбой утверждения об ошибке в -[UITableView _createpreparredcellforglobalrow:withIndexPath:], /SourceCache/UIKit_Sim /UIKit-1448.89 /UITableView.m: 5678… Я создал пользовательскую UITableViewCell с идентификатором newsTableViewCell, а затем пытаюсь загрузить ее с помощью UITableViewCell * cell = [[ViewFactory sharedViewFactory] cellOfKind:@»newsTableViewCell» для таблицы: TableView]; У вас есть какие-либо мысли по этому поводу …. еще раз большое спасибо.
2. Как вы это реализовали
cellOfKind:forTable:
?3. Первая ссылка в моем вопросе показывает весь код, который я использую. Приношу извинения за то, что не разместил это здесь, но сейчас я использую свой телефон для доступа к этому сайту и не могу публиковать напрямую с Mac. Хотя мне нравится именно этот код. Еще раз большое спасибо.
4. Я предполагаю, что ячейка не возвращается должным образом в
tableView:cellForRowAtIndexPath:
, но, судя по всему, все в порядке. Можете ли вы опубликовать журналы сбоев? И проверьте, неcellOfKind:forTable:
возвращаетсяnil
ли по какой-либо причине.5. Дипак, я не забыл о тебе… Просто работаю над другой частью приложения, я скоро вернусь к этому. Еще раз большое спасибо