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

标签 iphone 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),该对象与 person 的数据相同,但在独立的上下文中您将永远不会保存。如果您确实想保存它,您可以,但您将不得不处理其他问题(如果发生其他保存,则可能会发生保存冲突)。

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

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

相关文章:

iphone - 将核心数据存储从一个应用程序导入到另一应用程序

swift - 为 UISearchBar 设置的谓词更新 fetchedResultsController

iphone - 代码中核心数据简单关系

iphone - 从 UIPopoverController 拖放到其他 UIView

ios - 如何在iOS(Cocos2d)中将String转换为音频(声音)文件?

iphone - 在 iPhone 上无法选择的超链接和按钮 - 适用于所有其他浏览器

iphone - 当我删除我的 iOS 应用程序时,推送通知状态仍然存在

iphone - 如何使用libxml解析解析xml数据

iphone - iPhone SDK Core Data系统如何将日期类型存储到sqlite中?

ios - 核心数据:将 3 个实体中的对象提取到一次提取中并按日期排序?