ViewFactory iphone

#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. Дипак, я не забыл о тебе… Просто работаю над другой частью приложения, я скоро вернусь к этому. Еще раз большое спасибо