表格中的核心数据单元格导致口吃/滞后IOS / xCode

时间:2012-12-07 15:49:40

标签: ios xcode core-data

早上好。

我在设备上运行应用程序时遇到问题,当我在主表格中滚动时,它会滞后/断断续续。

我已经将问题缩小到从tableCell内部调用核心数据

- 在indexPath的行的单元格中 person是一个自定义类,联系人管理器是我的文件,包含对核心数据和操作数据的所有调用

    person.contactSelected = [contactManager checkContactSelectedStatus:person];

- 在我的contactManager文件中,调用将转到此功能。

并且只更新联系人所选择的状态(当用户按下按钮以改变通话中允许或不通话时)

-(NSNumber *) checkContactSelectedStatus:(ContactPerson *)person{

SWNAppDelegate *delegate = [[UIApplication sharedApplication]delegate];

NSManagedObjectContext *context = [delegate managedObjectContext];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:context];

NSFetchRequest *req =[[NSFetchRequest alloc]init];

[req setEntity:entity];

NSPredicate *pred =[NSPredicate predicateWithFormat:@"(recordID like %@)",[person.recordID stringValue]];

[req setPredicate:pred];

NSError *error;

NSManagedObject *checkStatus = [[context executeFetchRequest:req error:&error] objectAtIndex:0];

person.contactSelected = [checkStatus valueForKey:@"isSelected"];

return person.contactSelected;}

有没有一种简单的方法可以将其投入队列?我已阅读并试图弄清楚如何将NSManagedObject发送到队列,但是当我创建父MoC的子项时,它找不到实体“联系人”。我不知道是否有更简单的方法可以做到这一点!?

感谢您的时间,和 WhatWasIThinking!?!?!

1 个答案:

答案 0 :(得分:0)

是的,这是非常低效的代码。提取必须多次完成,即每个单元变为可见时。

您应该使用专门用于表视图的NSFetchedResultsController。它将决定适当的商店出行次数,以便优化速度和内存占用。

此外,您很可能会使用少得多的代码。

此外,像recordID like %@这样的谓词字符串没有多大意义。如果您使用ID,它们应该是唯一的,这样您就可以将它们编入索引并快速查找它们。 LIKE,就像CONTAINS这样的字符串函数相比,速度非常慢。