gpt4 book ai didi

ios - 无论是否在托管上下文 iOS 上调用保存,Core Data 中的实体是否会保留其状态?

转载 作者:行者123 更新时间:2023-11-28 18:10:06 25 4
gpt4 key购买 nike

我在我的应用程序中使用核心数据。

我的问题是无论我是否在 NSManagedObjectContext 上调用 Save,实体 (NSManagedObject) 都会保持其状态,唯一的条件是应用程序处于事件状态。当我终止应用程序并再次运行它时,所有实体都保留在最后一次调用“NSManagedObjectContext 上的Save”之前所做的最后属性或更改。

例如。我有 OpenViewControllerFormOpenViewController

FormOpenViewController 适用于 (Form *) 实体 (NSManagedObject)。

OpenViewController 调用 FormOpenViewController 并从数据库中获取 (Form *) 对象并将其传递给 FormOpenViewController 的 (Form *)form 对象。

FormOpenViewControllerviewDidLoad 中,我更改了 (Form *)form 的一个属性“editable”的值> 反对“YES”。

FormOpenViewController.m

- (void)viewDidLoad
{
// changed the editable property of form to yes from no
if([formEditData.editable boolValue] == NO)
{
form.editable = [NSNumber numberWithBool:YES];
}

}

-(void)saveData
{
[[shareInstance delegate].managedObjectContext save:nil];
[shareInstance delegate].arrForder = [[ipegsClient shareInstance ] getLoginUser].folders.allObjects;
}

所以现在如果我返回 OpenViewController 而不调用 saveData 方法,然后再次进入 FormOpenViewController 然后控制不会进入 if block ,这意味着它的表单对象现在具有“可编辑”属性,如“YES”,应该是“NO”,因为直到我还没有“saveData 函数”。

更新:

每次调用或显示它时,我都会创建 FormOpenViewController 的新实例。并且在每次调用 FormOpenViewController 之前从数据库中获取新的 (Form *) form 对象。

编辑:

在 applicationWillTerminate 中调用以下函数:

- (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.

abort();
}
}
}

有人知道为什么会这样吗?

提前致谢。如果我在某处出错,请纠正我。

最佳答案

这就是核心数据的工作原理。

将托管对象上下文视为您所做的任何更改的内存暂存器。当您更改对象时,只要您使用该上下文,该更改就是“真实的”。

如果您保存上下文,这些更改将写入下一级,即父上下文或您在磁盘上的持久存储。

如果您在不保存的情况下销毁上下文,这些更改将丢失。

如果您想恢复或撤消在特定 session 期间所做的更改,那么最简单的方法是创建一个子上下文并将其传递给您的编辑 View Controller 。如果您随后“取消”编辑 View Controller ,只需销毁子上下文,您的更改就会丢失。否则,保存上下文,它们将传递到主上下文。

因此,在不保存上下文的情况下终止应用程序意味着您下次启动时,上下文是根据持久存储中的数据构建的,其中没有写入您的更改。

关于ios - 无论是否在托管上下文 iOS 上调用保存,Core Data 中的实体是否会保留其状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26988735/

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