UITableView在快速滚动时崩溃

时间:2011-08-19 14:05:13

标签: ios uitableview core-data nsfetchedresultscontroller nsmanagedobject

我有一个TableView,用于填充从NSFetchedResultsController获取的数据。但是,当用户在表视图中滚动太快时(通常在表的底部附近),应用程序才会停止响应。

Xcode在

中显示崩溃断点

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

在我指定单元格属性的行:

cell.name.text = [Person firstName:speaker.firstName andLastName:speaker.lastName]; (cell是一个PersonStyleCell,UITableViewCell的子类)。

修改

使用NSManagedObject的错误状态属性,我现在收到错误:

CoreData could not fulfill a fault for '0x37f8f0 

同样,只有当用户滚动UITableView时,App才会崩溃。

知道应用程序崩溃的原因吗?没有内存泄漏,我只在dealloc方法中释放NSFetchedResultsController对象。可能是什么问题?

我意识到:

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

将检查存储在NSManagedObject中的数据是否存在故障(即尚未“加载”),我认为问题在于它正在尝试使用不可访问的数据设置单元属性。

将“set cell attributes”函数放在if语句中,该语句仅在数据不是错误的情况下继续设置单元格属性似乎可以修复崩溃,但是没有数据显示(我猜它初始化时,数据所有对象都设置为“fault”

在设置单元属性之前,我是否可以使用此故障状态属性等待数据加载?如果是这样,怎么样?

我希望这些信息能够大大简化我的问题

2 个答案:

答案 0 :(得分:1)

您设置的批量大小是多少?我使用批量大小为20的大量轻量级对象遇到了这个问题。增加批量大小(对我来说它是60)可以防止崩溃,而不会对滚动性能产生任何不利影响。

答案 1 :(得分:0)

我不是CoreData专家,但我认为速度不是问题(我们在应用程序中使用CoreData而且我无法滚动它)。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdTroubleshooting.html表示您正在删除对象。您是否尝试将CoreData与多个线程一起使用(总是很棘手)?

如果faultingState“有效”,那是因为如果出现错误,你不会完全初始化。