0

私のアプリには、Core Data モデルの一部のエンティティでオプションではないいくつかのプロパティ (関係) があります。applicationDidEnterBackgroundApp Delegateの save メソッドがあります。ここに問題があります。

一部のユーザーは、データを入力しているが、エンティティのオプションではないプロパティにまだ入力していないときに、電話またはプッシュ メッセージが来るため、データを失い続けます (保存エラー)。彼らは電話を取るか、メッセージを読み、アプリに戻ってデータ入力を続けます。ただし、私のアプリには、アプリを起動するたびに必要なパスコード ロックがあり、ユーザーがダッシュボード コントローラーに移動するため、電話/メッセージの前にデータ入力を再開できません。

そのため、managedObjectContext には、NOT Optional プロパティが入力されていない managedObject があります。ユーザーはさらにデータを入力し続け、データが保存されたと考えてアプリを閉じます。数時間後、またはドックからアプリを強制終了してアプリを再度開くと、電話/メッセージの後に入力されたすべてのデータが次のエラーで失われます。

NSLocalizedDescription = "The operation couldn\U2019t be completed. (Cocoa error 1570.)";
NSValidationErrorKey = propertyName;

このエラーが発生しないようにするにはどうすればよいですか? 私は2つの解決策を考えることができました:

1) すべてのプロパティをオプションにしますが、コア データ モデルを変更してデータ移行を行う必要があります。私はこれを行ったことがなく、ライブになったときに移行が失敗するのではないかと心配しています。アプリ内購入はすべてコア データに保存されます。

2) どういうわけか、コンテキストから NOT オプション プロパティが入力されていない不適切な managedObject をチェックし、保存する前にオブジェクトを削除します。どうすればいいですか?

3) ?

ありがとう、

4

3 に答える 3

2

発生した検証エラーを実際にキャッチして表示できるのは Core Data です。これを行う方法のサンプルを次に示します: https://stackoverflow.com/a/3510918/171933

そうすれば、ユーザーが保存する前 (おそらくデータの入力中) にデータを検証し、適切なメッセージを表示することができます。

于 2013-10-18T21:05:37.667 に答える
0

実際には、ユーザーが入力する必要がある CoreData オブジェクトの値は、nil にすることができます。CoreData ではなく、ビジネス ロジックでルールを適用する必要があります。保存するために入力する必要があるのは、キーや識別子などだけです。

于 2013-10-18T21:24:38.427 に答える