0

我的 NSFetchedResultsController 没有更新新导入的对象。

  1. 在后台线程上,我创建了一个不是主上下文子级的 NSManagedObjectContext 并添加了一个观察者,以便我可以合并更改。

    NSManagedObjectContext *localContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    [localContext setPersistentStoreCoordinator:[[NSManagedObjectContext defaultContext] persistentStoreCoordinator]];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextDidSave:)
                                                 name:NSManagedObjectContextDidSaveNotification object:nil];
    …
    -(void) contextDidSave:(NSNotification*) notification
    {
        if(![notification.object isEqual:[NSManagedObjectContext MR_defaultContext]] && ![notification.object isEqual:[NSManagedObjectContext MR_rootSavingContext]])
        {
            NSDictionary *userInfo = [notification userInfo];
            NSLog(@"updated: %i, inserted: %i", [userInfo[@"updated"] count], [userInfo[@"inserted"] count]);
            dispatch_async(dispatch_get_main_queue(), ^
                       {
                           [[NSManagedObjectContext MR_defaultContext] mergeChangesFromContextDidSaveNotification:notification];
                       });
        }
    }
    
  2. 我创建并反对并将其“可见”属性设置为 NO。
  3. 保存上下文。
  4. 将对象“可见”属性更新为 YES。
  5. 保存上下文。

    MyEntity *entity = [MyEntity insertInManagedObjectContext:localContext];
    entity.dateCreated = [NSDate date];
    
    if (![localContext save:&error]) {
        NSLog(@"%@", error);
    }
    
    [entity setVisibleValue:YES];
    
    if (![localContext save:&error]) {
        NSLog(@"%@", error);
    }
    

NSFetchedResultsController一个 fetchedRequest 过滤“可见”属性。

contextDidSave: 正在接收更新。

有时对象确实会成功并被NSFetchedResultsController. 这让我觉得我做的事情是正确的,我正在查看一个 CoreData 错误。另一方面,我不确定该mergeChangesFromContextDidSaveNotification方法到底发生了什么。

我用来隔离问题的代码可以在https://github.com/onato/CoreDataImportTest找到

4

0 回答 0