Сбой UITableView при быстрой прокрутке - PullRequest
2 голосов
/ 19 августа 2011

У меня есть TableView, который заполняет данные, извлеченные из NSFetchedResultsController.Однако приложение просто перестает отвечать, когда пользователь слишком быстро выполняет прокрутку в представлении таблицы (обычно в нижней части таблицы).

Xcode отображает точку останова в

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

в строке, где я назначаю атрибуты ячейки:

cell.name.text= [Person firstName: speaker.firstName иLastName: speaker.lastName];(ячейка - PersonStyleCell, подкласс UITableViewCell).

EDIT

Дурачиться со свойством состояния ошибки NSManagedObject, теперь я получаю ошибку:

CoreData could not fulfill a fault for '0x37f8f0 

Опять же, приложение падает только тогда, когда пользователь слишком быстро прокручивает UITableView.

Есть идеи, почему происходит сбой приложения?Нет утечек памяти, и я только освобождаю NSFetchedResultsController Objects в методе dealloc.В чем может быть проблема?

Я понял, что:

 ([(Person*)[self.personArray objectAtIndex:[indexPath row]] faultingState] == 0)

проверит, являются ли данные, хранящиеся в NSManagedObject, ошибочными (т.е. еще не «загружены»), и я думаю,проблема в том, что он пытается установить атрибуты ячейки с данными, которые еще не доступны.

Размещение функции «установить атрибуты ячейки» в операторе if, который выполняет установку атрибутов ячейки только в том случае, если данные не являются ошибочными, похоже, исправляет сбой, но данные не отображаются (я думаю, когда они инициализируютсяданные для всех объектов устанавливаются как «ошибка»

Могу ли я использовать это свойство состояния ошибки, чтобы дождаться загрузки данных перед установкой атрибутов ячейки? Если да, то как?

Надеюсь, эта информация значительно упростила мой вопрос

Ответы [ 2 ]

2 голосов
/ 01 октября 2012

Какой размер партии вы устанавливали?У меня была эта проблема с большим количеством легких объектов, использующих размер пакета 20. Увеличение размера пакета (для меня это было 60) предотвратило сбой без каких-либо негативных последствий для производительности прокрутки.

1 голос
/ 23 августа 2011

Я не эксперт по CoreData, но не думаю, что скорость - это проблема (мы используем CoreData в нашем приложении, и я не могу ее прокрутить).

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdTroubleshooting.htmlпредполагает, что вы удаляете объекты.Вы пытаетесь использовать CoreData с несколькими потоками (всегда сложно)?

Если faultingState "работает", это потому, что вы не собираетесь полностью инициализироваться, если есть ошибка.

...