Отложить код в классе управляемых объектов с помощью контроллера fetchedresults до тех пор, пока управляемые объекты не будут видны - PullRequest
0 голосов
/ 26 января 2019

У меня сложилось впечатление - возможно, неправильно, что при использовании fetchedResultsController для выборки таблицы из базовых данных возвращаемые управляемые объекты не обрабатываются, пока они не становятся видимыми.

Другими словами, я подумал, что когда FRC выполняет выборку, он не обрабатывает код в managedObjectClass до тех пор, пока управляемый объект не отобразится в cellForRowAtIndexPath - до тех пор, пока вы не предотвратите возврат объектов в качестве ошибок.

В моем постоянном магазине у меня около 3000 управляемых объектов. В управляемом объектном классе у меня есть некоторый код обработки, который вызывается 3000 раз при загрузке первых десяти строк таблицы, что резко замедляет работу приложения.

Есть ли способ предотвратить вызов этого кода, пока не настало время для отображения управляемого объекта?

Код моего управляемогоObjectClass, который выполняется 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;

Что я делаю неправильно, из-за чего метод 'process' в управляемом объекте запускается 3000 раз, когда в табличном представлении видны только 10 строк?

I

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...