使用fetchedresultscontroller将托管对象类中的代码推迟到托管对象可见

时间:2019-01-25 21:50:11

标签: ios nsfetchedresultscontroller nsmanagedobject

给我的印象是-也许是错误的,当您使用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次?

0 个答案:

没有答案