【发布时间】:2014-10-13 23:15:48
【问题描述】:
在 iOS 7(及更早版本)中,可以使用 选项 有效地创建“临时”NSManagedObjects,以便稍后将其添加到上下文并持久化,如下所示:
NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"User" inManagedObjectContext:managedObjectContext];
User* user = [[User alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:nil];
注意nil NSManagedObjectContext 参数。 (查看 Marcus S. Zarra 对此方法的回答 here)
然而,iOS 8 已经改变了关系的管理方式,如果你创建一个临时对象并在设置它的上下文之前添加一个关系,这个关系将在重新启动时被删除:
User* user = [User temporaryEntity];
[user addPhotosObject:photo];
[managedObjectContext:insertObject:user];
[managedObjectContext:&error];
这不会影响非关系对象,但确实无法创建具有关系的临时对象。
有谁知道如何解释这一变化并创建/使用临时工作NSManagedObjects?谢谢!
--
另外,请查看 iOS 8 论坛上的 this 相关帖子。
【问题讨论】:
-
一个 NSManagedObject 被一个 NSManagedObjectContext 观察——这就是“管理”发生的地方。尝试在没有 NSManagedObjectContext 的情况下创建 NSManagedObject 将导致未定义的行为。从您的问题中不清楚您为什么要这样做,特别是因为所有 NSManagedObjects 在保存之前都是临时的。
标签: ios objective-c cocoa-touch core-data ios8