创建NSManagedObject而不保存?

Jos*_*ane 9 core-data objective-c nsmanagedobject nsmanagedobjectcontext ios

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

我需要制作NSManagedObject而不保存它,我该怎么做?

我想这样做的原因是应用程序有一个设置,用户输入他们的详细信息,但我只想保存对象,如果他们完成设置(他们可以选择取消,在这种情况下,对象需要是丢弃而不保存,这就是为什么我不想直接插入它.

我尝试在没有上下文的情况下插入一个,但应用程序崩溃了.

我尝试过以下方法:

GuestInfo *guest;
guest = (GuestInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"GuestInfo" inManagedObjectContext:nil];
Run Code Online (Sandbox Code Playgroud)

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

'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'GuestInfo''
Run Code Online (Sandbox Code Playgroud)

Rob*_*b B 14

我建议创建托管对象并正常插入托管对象上下文.您将获得对托管对象的引用,即:

GuestInfo* guest = (GuestInfo *)[NSEntityDescription insertNewObjectForEntityForName:@"GuestInfo" inManagedObjectContext:managedObjectContext];
Run Code Online (Sandbox Code Playgroud)

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

[guest deleteInContext:managedObjectContext];
Run Code Online (Sandbox Code Playgroud)

托管对象上下文被设计为暂存器,您可以像这样在其中创建和删除对象.

您可能考虑的另一个选择是:

[managedObjectContext rollback]
Run Code Online (Sandbox Code Playgroud)

如果用户取消.即,您将在托管对象上下文中创建托管对象,但如果用户取消,则将托管对象上下文的状态撤消或回滚到上次保存时的状态.请参阅Apple的"使用托管对象"文档的"撤消管理"部分:

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


Jod*_*ins 7

创建NSManagedObjectContext,作为普通上下文的子项.您可以在那里进行所需的所有更改,只要您不调用save,那里的内容就不会被推送.

例如...

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSPrivateQueueConcurrencyType];
moc.parentContext = myCurrentManagedObjectContext;
Run Code Online (Sandbox Code Playgroud)

现在,从您程序的任何线程中,您可以进行以下调用......

[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.
}];
Run Code Online (Sandbox Code Playgroud)