【发布时间】:2011-08-19 14:05:12
【问题描述】:
我有一个 TableView 填充从 NSFetchedResultsController 获取的数据。但是,当用户在表格视图中滚动得太快(通常在表格底部附近)时,应用程序会停止响应。
Xcode 在
中显示一个崩溃断点- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
在我分配单元格属性的那一行:
cell.name.text = [Person firstName:speaker.firstName and LastName:speaker.lastName]; (cell 是 PersonStyleCell,UITableViewCell 的子类)。
编辑
玩弄 NSManagedObject 的错误状态属性,我现在得到了错误:
CoreData could not fulfill a fault for '0x37f8f0
同样,只有当用户滚动 UITableView 太快时,应用才会崩溃。
知道应用程序崩溃的原因吗?没有内存泄漏,我只在 dealloc 方法中释放 NSFetchedResultsController 对象。可能是什么问题?
我意识到:
([(Person*)[self.personArray objectAtIndex:[indexPath row]] faultingState] == 0)
将检查存储在 NSManagedObject 中的数据是否有故障(即尚未“加载”),我认为问题在于它试图使用尚无法访问的数据设置单元格属性。
将“设置单元格属性”函数放在 if 语句中,如果数据没有错误,则仅继续设置单元格属性似乎修复了崩溃,但没有显示数据(我猜它初始化时,数据所有对象都设置为“故障”
我可以使用这个错误状态属性等到数据加载完毕后再设置单元格属性吗?如果有,怎么做?
我希望这些信息能大大简化我的问题
【问题讨论】:
-
是的,我相信
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:PlaceholderCellIdentifier];会解决这个问题 -
您是否从某个 REST API 获取 Person 数组中每个 Person 的数据 - 这就是为什么需要时间才能返回的原因?
-
nope- 正在从 CoreData 检索数据
-
设法得到新的错误 - 请参阅修改后的问题
-
很难用这里的信息进行调试,但似乎 CoreData 中可能有一些损坏的数据?尝试在错误上设置断点以查看导致此错误的 CoreData 对象。
标签: ios uitableview core-data nsfetchedresultscontroller nsmanagedobject