IOS 8 master data issue: global identifier cannot be temporary while recording

I port my application from iOS 7 to iOS 8 and I get the following error in Xcode when I try to save the Core Data context. This bug was missing in iOS 7 and Xcode 5.

This is the code I'm trying to run:

[_managedObjectContext save:&error]

This exception: The application terminated due to the unannounced exception "NSInternalInconsistencyException", reason: "recordChangeSnapshot: forObjectID :: global identifier cannot be temporary while writing

Here is the code for my managed object:

- (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;
    }

    return _managedObjectContext;
}

- (void)mergeChangesFrom_iCloud:(NSNotification *)notification {

    NSLog(@"Merging in changes from iCloud...");

    NSManagedObjectContext* moc = [self managedObjectContext];

    [moc performBlock:^{

        [moc mergeChangesFromContextDidSaveNotification:notification];

        NSNotification* refreshNotification = [NSNotification notificationWithName:@"SomethingChanged"
                                                                        object:self
                                                                      userInfo:[notification userInfo]];

        [[NSNotificationCenter defaultCenter] postNotification:refreshNotification];
    }];
}
+3
source share

All Articles