Ios 处理核心数据保存错误的方法(Cocoa错误1570.)

Ios 处理核心数据保存错误的方法(Cocoa错误1570.),ios,objective-c,xcode,core-data,Ios,Objective C,Xcode,Core Data,我的应用程序有一些属性(关系),在我的核心数据模型的某些实体中不是可选的。我在App委托的applicationidentinterbackground上有save方法。问题就在这里 我的一些用户不断丢失数据(保存错误),因为当他们输入数据但尚未填写实体的非可选属性时,会出现电话或推送消息。他们拿起电话或阅读信息,返回应用程序并继续数据输入。但是,我的应用程序有一个密码锁,在每次启动应用程序时都需要该密码锁,它会将用户带到仪表板控制器,这样他们就无法在电话/消息之前恢复数据输入 因此,在mana

我的应用程序有一些属性(关系),在我的核心数据模型的某些实体中不是可选的。我在App委托的
applicationidentinterbackground
上有save方法。问题就在这里

我的一些用户不断丢失数据(保存错误),因为当他们输入数据但尚未填写实体的非可选属性时,会出现电话或推送消息。他们拿起电话或阅读信息,返回应用程序并继续数据输入。但是,我的应用程序有一个密码锁,在每次启动应用程序时都需要该密码锁,它会将用户带到仪表板控制器,这样他们就无法在电话/消息之前恢复数据输入

因此,在managedObjectContext中有一个具有unfilled NOT Optional属性的managedObject。用户继续填写更多数据,然后关闭应用程序,认为数据已保存。几个小时后,或者当他们从dock中关闭应用程序并重新打开应用程序时,在电话/消息后输入的所有数据都会消失,并出现以下错误:

NSLocalizedDescription = "The operation couldn\U2019t be completed. (Cocoa error 1570.)";
NSValidationErrorKey = propertyName;
如何防止发生此错误?我可以想出两种解决方案:

1) 使所有属性都是可选的,但我必须更改核心数据模型并进行数据迁移。我从来没有这样做过,我担心如果迁移在运行时失败。所有应用内购买都存储在核心数据中

2) 从上下文中检查具有未填充非可选属性的坏managedObject,并在保存之前删除该对象。我该怎么做

3) ?


谢谢,

因为你的应用程序不允许人们从他们离开的地方开始,所以你可以在加载密码视图时处理新的、未保存的对象。您必须有一个对他们正在编辑的对象的引用,所以请删除它,然后继续。只需使用托管对象上下文的
deleteObject:
方法

如果你能在他们返回应用程序时恢复以前的状态,那就更好了。让您的密码视图覆盖编辑视图,而不是返回应用程序的初始视图。然后,在用户输入密码后,只需隐藏密码视图,用户就可以继续他们原来所在的位置


值得一提的是,将属性从强制更改为可选不需要数据迁移。并不是每一个变化都能改变。但这并不是最好的解决方案。

因为你的应用程序不允许人们从他们离开的地方开始,所以你可以在加载密码视图时处理新的未保存对象。您必须有一个对他们正在编辑的对象的引用,所以请删除它,然后继续。只需使用托管对象上下文的
deleteObject:
方法

如果你能在他们返回应用程序时恢复以前的状态,那就更好了。让您的密码视图覆盖编辑视图,而不是返回应用程序的初始视图。然后,在用户输入密码后,只需隐藏密码视图,用户就可以继续他们原来所在的位置


值得一提的是,将属性从强制更改为可选不需要数据迁移。并不是每一个变化都能改变。但这并不是最好的解决方案。

因为你的应用程序不允许人们从他们离开的地方开始,所以你可以在加载密码视图时处理新的未保存对象。您必须有一个对他们正在编辑的对象的引用,所以请删除它,然后继续。只需使用托管对象上下文的
deleteObject:
方法

如果你能在他们返回应用程序时恢复以前的状态,那就更好了。让您的密码视图覆盖编辑视图,而不是返回应用程序的初始视图。然后,在用户输入密码后,只需隐藏密码视图,用户就可以继续他们原来所在的位置


值得一提的是,将属性从强制更改为可选不需要数据迁移。并不是每一个变化都能改变。但这并不是最好的解决方案。

因为你的应用程序不允许人们从他们离开的地方开始,所以你可以在加载密码视图时处理新的未保存对象。您必须有一个对他们正在编辑的对象的引用,所以请删除它,然后继续。只需使用托管对象上下文的
deleteObject:
方法

如果你能在他们返回应用程序时恢复以前的状态,那就更好了。让您的密码视图覆盖编辑视图,而不是返回应用程序的初始视图。然后,在用户输入密码后,只需隐藏密码视图,用户就可以继续他们原来所在的位置


值得一提的是,将属性从强制更改为可选不需要数据迁移。并不是每一个变化都能改变。但这不是最好的解决方案。

您实际上可以捕获并显示核心数据中出现的验证错误。以下是如何做到这一点的示例:


这样,您就可以在用户保存数据之前(可能是在用户输入数据时)验证数据,并向用户显示相应的消息。

您实际上可以捕获并显示核心数据中出现的验证错误。以下是如何做到这一点的示例:


这样,您就可以在用户保存数据之前(可能是在用户输入数据时)验证数据,并向用户显示相应的消息。

您实际上可以捕获并显示核心数据中出现的验证错误。以下是如何做到这一点的示例:


这样,您就可以在用户保存数据之前(可能是在用户输入数据时)验证数据,并向用户显示相应的消息。

您实际上可以捕获并显示核心数据中出现的验证错误。以下是如何做到这一点的示例:


这样,您就可以在用户保存数据之前(可能是在用户输入数据时)验证数据,并向用户显示相应的消息。

实际上,用户负责填充的CoreData对象上的任何值