1

你好老乡overflowersNSFetchedResultsController,核心数据和线程

我有一个很难搞清楚如何在后台线程获取NSManagedObjects然后显示通过一个NSFetchedResultsController的结果。

这是我到目前为止的代码:

 _theManagedObjectContext = [[DataManager sharedInstance] mainManagedObjectContext]; 

    __block NSMutableArray *objectsIDs; 

    [[[DataManager sharedInstance] backgroundManagedObjectContext] performBlock:^{ 

     NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
     fetchRequest.entity = [NSEntityDescription entityForName:@"Ret" inManagedObjectContext:[[DataManager sharedInstance] backgroundManagedObjectContext]]; 

     NSArray *results = [[[DataManager sharedInstance] backgroundManagedObjectContext] executeFetchRequest:fetchRequest error:nil]; 

     for (Ret *ret in results) { 
      NSManagedObjectID *moID = [ret objectID]; 

      [objectsIDs addObject:moID]; 

      NSLog(@"%@", objectsIDs); 
     } 

     [[[DataManager sharedInstance] mainManagedObjectContext ] performBlock:^{ 

      [self loadDishesWithObjectIDs:objectsIDs]; 

     }]; 



    }]; 

首先我取在后台线程中的所有对象,然后转化中的NSMangedObjectIDs主线程。

在我的“loadDishes”的方法:

- (void)loadDishesWithObjectIDs:(NSArray *)objectsIDs { 

    /* 
    [NSFetchedResultsController deleteCacheWithName:@"dishes"]; 
    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:**???**? managedObjectContext:_theManagedObjectContext sectionNameKeyPath:nil cacheName:@"dishes"]; 
    _fetchedResultsController.delegate = self; 




    NSError *error = nil; 


    if (![_fetchedResultsController performFetch:&error]) { 
     NSLog(@"Fetch Failed"); 

    } 


    NSArray *theDishes = _fetchedResultsController.fetchedObjects;*/ 



} 

我将如何管理由的ObjectID是从后台线程获取的,以显示与NSFetchResultscontroller的对象?

预先感谢您:)

回答

1

您将需要创建一个读取请求,看起来像这样

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
fetchRequest.entity = [NSEntityDescription entityForName:@"Ret" 
            inManagedObjectContext:[[DataManager sharedInstance] mainManagedObjectContext]]; 
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"self IN %@", objectIDs];