Jos*_*ane 9 core-data objective-c nsmanagedobject nsmanagedobjectcontext ios
我需要制作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的"使用托管对象"文档的"撤消管理"部分:
创建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)
归档时间: |
|
查看次数: |
8173 次 |
最近记录: |