iphone – 如何从Core Data分离托管对象?

在Core Data项目中,我的界面上有两个按钮(一个表),一个用于编辑人的数据并将其保存到数据库中,一个可以让您在视觉上摆弄数据,而无需实际将其保存到数据库.

如何“分离”核心数据对象,以便它不会将数据写入数据库?我试图编写一个新的NSObject类来模仿NSManagedObject类,然后将数据移动到NSObject类中,但它仍然会更改数据库!

//button for editing and saving
PersonObj *person = (PersonObj *)[fetchedResultsController objectAtIndexPath:indexPath];
PersonEditViewController *editViewController = [[PersonEditViewController alloc] initWithStyle:UITableViewStyleGrouped];
// puts the managed object into the new view controller
editViewController.person = person;
[self.viewController pushViewController:editViewController animated:animated];
[editViewController release];

//button for editing and NOT saving
PersonObj *person = (PersonObj *)[fetchedResultsController objectAtIndexPath:indexPath];
PersonFiddlingViewController *fiddling = [[PersonFiddlingViewController alloc] initWithStyle:UITableViewStyleGrouped];
// move db data into non-db class??? not working
fiddling.eyeColor = person.eyeColor;
fiddling.name = person.name;
[self.viewController pushViewController:fiddling animated:animated];
[fiddling release];

最佳答案 我不认为你理解CD是如何工作的.您无法从CoreData分离对象,CD是对象的后备存储.

我也非常确定您所看到的问题与您上面包含的代码无关,因为即使在第一种情况下,您所拥有的代码中也没有任何内容可以将更改提交给持久存储.没有对NSManagedObjectContext的调用:save:对象图的所有更改都将是瞬态的.

换句话说,为了做你想做的事情(调整东西而不保存它),只需不要调用save:在你调整对象后的上下文中.如果您需要保存其他更改,您可以在保存之前显式回滚调整,或者您可以在调整它们之前将调整后的对象包装在它们自己的上下文中:

NSManagedObjectContext *tweakingContext = [[NSManagedObjectContext alloc] init];
tweakingContext.persistentStoreCoordinator = person.managedObjectContext.persistentStoreCoordinator;
PersonObj *tweakablePerson = [tweakingContext objectWithID:person.managedObjectID];

//Do your stuff

[tweakingContext release];

上面的代码将为您提供与人相同的数据出错的新对象(tweakablePerson),但在独立的上下文中,您永远不会保存.如果您确实希望保存它,则必须处理其他问题(如果发生其他保存,则可能存在冲突).

同样,虽然这回答了你问的问题,但我不认为它会解决你的问题,因为问题几乎肯定不在fetch或对象创建代码(你展示的)中,而是在你没有的保存代码中上市.

点赞