给我的印象是-也许是错误的,当您使用fetchedResultsController
从核心数据中获取表视图时,返回的被管理对象直到它们可见时才被处理。
换句话说,我认为当FRC执行访存时,只要不阻止对象返回,就不会在cellForRowAtIndexPath
中显示托管对象之前处理托管对象类中的代码。错误。
在我的持久性存储中,我大约有3000个受管对象。在managedobjectclass中,当表视图的前十行加载时,我有一些处理代码被调用3000次,从而极大地降低了应用程序的速度。
有什么方法可以阻止该代码在被管理对象显示之前被调用?
我的managedObjectClass中的代码可以运行3000次,如下所示:
-(void)processObject;
{
NSLog("processing")
if ( self.processed ) return;
self.processed = YES;
//Following is a really lengthy,complicated method
NSString *sales = [[myModel sharedInstance].calculateSalesForTitle:self.title];
//store temporary computed variable
self.calculatedSales = sales;
}
FRC中的代码如下所示。
NSFetchRequest *fetchRequest= [[NSFetchRequest alloc] init];
NSManagedObjectContext *managedObjectContext = [Model sharedInstance].managedObjectContext;
NSEntityDescription *entity =[NSEntityDescription entityForName:@"Books" inManagedObjectContext:managedObjectContext];
fetchRequest.entity=entity;
[fetchRequest setFetchBatchSize:20];
self.fetchedResultsController=[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
self.fetchedResultsController.delegate=self;
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
}
self.myRestults = [_fetchedResultsController fetchedObjects];
cellForRowAtIndexpath
中引用构造变量的代码如下。
cell.salesLabel.text = self.book.calculatedSales;
我做错了什么,导致在表视图中仅可见10行时,managedObject中的方法“ process”运行3000次?
我