创build一个NSManagedObject而不保存?

可能重复:
存储但不保存NSManagedObject到CoreData?

我需要做一个NSManagedObject而不保存它,我怎么能做到这一点?

我想这样做的原因是应用程序有一个设置,其中用户input他们的细节,但是我只想保存对象,如果他们完成设置(他们有select取消,在这种情况下,对象需要丢弃没有被保存,这就是为什么我不想马上插入它)。

我试图插入一个没有上下文,但应用程序崩溃。

我已经尝试了以下内容:

GuestInfo *guest; guest = (GuestInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"GuestInfo" inManagedObjectContext:nil]; 

这会导致崩溃,并显示以下错误消息:

 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'GuestInfo'' 

这导致了

希望你能帮忙,谢谢。

我会build议创buildpipe理对象,并像往常一样插入到托pipe对象上下文中。 你将有一个对被pipe理对象的引用,即:

 GuestInfo* guest = (GuestInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"GuestInfo" inManagedObjectContext:managedObjectContext]; 

然后,如果用户取消,只需从托pipe对象上下文中删除它,如下所示:

 [guest deleteInContext:managedObjectContext]; 

被pipe理的对象上下文被devise为一个暂存器,用于创build和删除它中的对象。

您可能考虑的另一个select是呼叫:

 [managedObjectContext rollback] 

如果用户取消。 即,您将在托pipe对象上下文中创build托pipe对象,但是如果用户取消,则可以撤销或回滚托pipe对象上下文的状态,使其最后一次保存时的状态如何。 请参阅Apple的“使用托pipe对象”文档的“撤销pipe理”部分:

https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOs.html

创build一个NSManagedObjectContext,作为您的正常上下文的子节点。 你可以在那里做所有你想要的改变,只要你不叫保存,那里的东西就不会被推。

例如…

 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, and they obviously will they be saved either. }]; 

如果你不想保存它,那么创build一个核心数据对象有点奇怪……但无论如何,这个错误说明你没有包含在你的项目中的名为GuestInfo的模型文件。 validation它是否存在,并包含在“ 复制包资源”部分。 模型文件是您在数据库中声明types以及它们之间的连接的文件。

被pipe理的对象总是需要有一个上下文。 如果你不希望这些对象是持久化的,那么不要保存这个上下文。

如果你永远不希望你的对象是持久的,那么你是否应该真的使用核心数据是值得怀疑的。