我在处理CoreData中的对象ID时遇到问题.我正在使用MagicalRecord以方便并且有3个上下文:私有队列工作上下文,UI的主队列上下文和工作上下文的父级,以及作为主上下文的父级的私有队列保存上下文.
我的目标是在工作上下文中创建一个对象,保存到持久存储,将它的objectID URL保存到NSUserDefaults,然后能够使用objectID拉出该MO.但是,我发现在保存对象的永久ID后正在改变.
在下面的控制台输出中,您可以看到在我请求永久ID后,我得到的值是"F474F6EE-A225-456B-92EF-AB1407336F15/CDBaseAccount/p1"但稍后当我列出CD中的所有对象时,唯一的对象就在那里ID为"F474F6EE-A225-456B-92EF-AB1407336F15/CDBaseAccount/p2".p1 vs p2,发生了什么?
码:
NSManagedObjectContext *c = [NSManagedObjectContext MR_contextThatPushesChangesToDefaultContext];
[c performBlockAndWait:^{
NSArray *all = [CDBaseAccount MR_findAllInContext:c];
NSLog(@"count: %d", all.count);
NSLog(@"all accounts = %@", all);
CDBaseAccount *a = [CDBaseAccount MR_createInContext:c];
a.accountName = @"foo";
[c MR_saveNestedContexts];
NSLog(@"temp a.objectID = %@", a.objectID);
NSError *error;
if (![c obtainPermanentIDsForObjects:@[a] error:&error]) {
NSLog(@"perm id error: %@", error);
return;
}
NSLog(@"perm a.objectID = %@", a.objectID);
NSURL *u = a.objectID.URIRepresentation;
dispatch_async(dispatch_get_main_queue(), ^{
NSManagedObjectContext *d = [NSManagedObjectContext MR_defaultContext];
NSArray *all = [CDBaseAccount MR_findAllInContext:d];
NSLog(@"count: %d", all.count); …Run Code Online (Sandbox Code Playgroud)