3

爲了從我呼籲入境我的表視圖細胞實體獲取信息,我有這樣的代碼:NSFetchedResultsController返回對象與另一個上下文

Entry *entry = [self.appDelegate.fetchedResultsController objectAtIndexPath:indexPath]; 

    NSLog(@"timeline entry contexts: %@ and %@", [[AppDelegate applicationDelegate] managedObjectContext], [entry managedObjectContext]); 

兩個managedObjectContexts返回爲不同的。這是我獲取結果控制器:

- (NSFetchedResultsController *)fetchedResultsController { 

    if (_fetchedResultsController != nil) { 
     return _fetchedResultsController; 
    } 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entry" inManagedObjectContext:[AppDelegate applicationDelegate].managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    [fetchRequest setFetchBatchSize:20]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 

    [fetchRequest setSortDescriptors:sortDescriptors]; 

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[AppDelegate applicationDelegate].managedObjectContext sectionNameKeyPath:@"sectionIdentifier" cacheName:@"Root"]; 
    aFetchedResultsController.delegate = self; 
    self.fetchedResultsController = aFetchedResultsController; 

    self.fetchedResultsController.delegate = self; 

    return _fetchedResultsController; 
} 

這是我的商務部:

- (NSManagedObjectContext *)managedObjectContext { 

    if (_managedObjectContext != nil) { 
     return _managedObjectContext; 
    } 

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; 

    if (coordinator != nil) { 
     NSManagedObjectContext* moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 

     [moc performBlockAndWait:^{ 
      [moc setPersistentStoreCoordinator: coordinator]; 
      [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(mergeChangesFrom_iCloud:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:coordinator]; 
     }]; 
     _managedObjectContext = moc; 

     _managedObjectContext.mergePolicy = [[NSMergePolicy alloc] 
              initWithMergeType:NSMergeByPropertyObjectTrumpMergePolicyType]; 
    } 

    return _managedObjectContext; 
} 

我不能確定爲什麼它返回一個不同的MOC。有什麼想法嗎?

+0

你設置'_managedObjectContext = nil'的任何地方你的問題程序?然後'[[AppDelegate applicationDelegate] managedObjectContext]'會返回一個新創建的MOC,而'self.appDelegate.fetchedResultsController'可能仍然使用舊的MOC。 –

+0

兩件事;嘗試將FRC的cacheName屬性設置爲nil而不是@「Root」。其次,不要在你的MOC上設置合併策略。應該幫助你。感覺合併政策是你的問題。 – NonatomicRetain

回答

0

你可以嘗試執行請求宣告根

[NSFetchedResultsController deleteCacheWithName:@"Root"]; 
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[AppDelegate applicationDelegate].managedObjectContext sectionNameKeyPath:@"sectionIdentifier" cacheName:@"Root"]; 

前清除緩存根我碰到類似的東西來了最近和固定

相關問題