我需要制作NSManagedObject而不保存它,我该怎么做?
我想要这样做的原因是应用程序有一个设置,用户输入他们的详细信息,但是我只想保存对象,如果他们完成设置(他们可以选择取消,在这种情况下对象需要在不保存的情况下丢弃,这就是为什么我不想直接插入它。)
我尝试在没有上下文的情况下插入一个但应用程序崩溃。
我尝试了以下内容:
GuestInfo *guest;
guest = (GuestInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"GuestInfo" inManagedObjectContext:nil];
这会导致崩溃,并显示以下错误消息:
'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'GuestInfo''
答案 0 :(得分:14)
我建议创建托管对象并正常插入托管对象上下文。您将引用托管对象,即:
GuestInfo* guest = (GuestInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"GuestInfo" inManagedObjectContext:managedObjectContext];
然后,如果用户取消,只需从托管对象上下文中删除它,如下所示:
[guest deleteInContext:managedObjectContext];
托管对象上下文被设计为一个暂存器,您可以像这样在其中创建和删除对象。
您可以考虑的另一个选择是:
[managedObjectContext rollback]
如果用户取消。即,您将在托管对象上下文中创建托管对象,但如果用户取消,则将托管对象上下文的状态撤消或回滚到上次保存时的状态。请参阅Apple的“使用托管对象”文档的“撤消管理”部分:
答案 1 :(得分:7)
创建NSManagedObjectContext,作为普通上下文的子项。您可以在那里进行所需的所有更改,只要您不调用save,那里的内容就不会被推送。
例如......
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSPrivateQueueConcurrencyType];
moc.parentContext = myCurrentManagedObjectContext;
现在,您可以在程序的任何线程中进行以下调用......
[moc performBlock:^{
// Do anything you want to with this context... make a new object, whatever.
// As long as you do not call [moc save], your changes will not propagate
// up to the parent context, nor saved.
}];
答案 2 :(得分:0)
如果你不想保存它,那么创建一个Core Data对象有点奇怪......但是无论如何错误都表明你的项目中没有包含名为GuestInfo的模型文件。验证它是否存在并包含在复制包资源部分中。模型文件是您声明数据库中的类型以及它们之间的连接的文件。
答案 3 :(得分:0)
托管对象始终需要具有上下文。如果您不希望对象持久化,只需不保存上下文。
如果您从不希望您的对象具有持久性,那么您是否应该实际使用核心数据是值得怀疑的。