Create an NSManagedObject Without Saving? [duplicate]

我怕爱的太早我们不能终老 提交于 2019-11-30 05:14:34

I would recommend creating the managed object and inserting into your managed object context as normal. You will have a reference to the managed object, i.e.:

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

Then if the user cancels, just delete it from the managed object context like this:

[guest deleteInContext:managedObjectContext];

The managed object context is designed as a scratchpad for you to create and delete objects in it like this.

Another option you might consider is calling:

[managedObjectContext rollback]

if the user cancels. i.e. you would create the managed object in the managed object context, but if the user cancels, you undo or rollback the state of the managed object context to how it was at the last time it was saved. See the "Undo Management" section of the Apple's "Using Managed Objects" doc:

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

Jody Hagins

Create a NSManagedObjectContext, as a child of your normal context. You can make all the changes in there that you want, and as long as you don't call save, the stuff in there will not get pushed.

For example...

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSPrivateQueueConcurrencyType];
moc.parentContext = myCurrentManagedObjectContext;

Now, from within any thread in your program, you can make the following call...

[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.
}];

Managed objects always need to have a context. If you don't want the objects to be persistent, simply don't save the context.

If you never want your objects to be persistent, it is questionable if you should actually use Core Data.

It is a bit strange to make a Core Data object if you don't want to save it....but anyway the error says that you have no model file named GuestInfo included in your project. Verify that it exists and is included in your Copy Bundle Resources section. The model file is the one where you declare the types in your database and the connections between them.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!