【问题标题】:NSFetchedResultsController, Core data and ThreadingNSFetchedResultsController,核心数据和线程
【发布时间】:2013-04-05 15:12:14
【问题描述】:

各位大侠们好

我很难弄清楚如何在后台线程中获取 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]; 

        }];



    }];

首先,我在后台线程中获取所有对象,然后将 NSMangedObjectID 传输到主线程。

在我的“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 的对象?

提前谢谢你:)

【问题讨论】:

    标签: objective-c multithreading core-data nsfetchedresultscontroller


    【解决方案1】:

    您需要创建一个类似这样的获取请求

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多