gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:20:57 25 4
gpt4 key购买 nike

在核心数据项目中,我的界面(一张表)上有两个按钮,一个用于编辑有关人员的数据并将其保存到数据库,另一个让您可以直观地摆弄数据,而无需实际操作将其保存到数据库。如何“分离”核心数据对象,以便它不会将数据写入数据库?我尝试编写一个新的 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),该对象与 person 的数据相同,但在独立的上下文中您将永远不会保存。如果您确实想保存它,您可以,但您将不得不处理其他问题(如果发生其他保存,则可能会发生保存冲突)。

同样,虽然这回答了您提出的问题,但我认为它不会解决您的问题,因为问题几乎肯定不在获取或对象创建代码(您显示的)中,而是在保存代码中您还没有列出。

关于iphone - 如何从 Core Data 中分离托管对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1512534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com