2017-11-14 10 views
0

私のコアデータは、attribute1、attribute2、attribute3、attribute4、attribute5(すべての属性タイプは変換可能)のような5つの属性を持ちます。現在、App Storeで利用可能です。アプリバージョン2.0では、私はコアデータDBを更新しました。私はattribute6のようなもう一つの属性を追加しました。私はコアデータのバージョンをコアデータからコアデータに変更しました。このようにpersistentStoreCoordinatorを変更しました。コアデータとアプリケーションから "<NULL>"データを取得すると、NSUserDefaultsに保存するとクラッシュしますか?

NSMutableDictionary *options = [[NSMutableDictionary alloc] init]; 
[options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption]; 
[options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption]; 
それが正常に動作していますが、(私はDBからデータを取得する場合)2.0(新しいバージョンの最初のインストール)へのバージョン1.0からアプリの更新の時に私はattribute6から「NULL」データを取得しています

と私NSUserDefaultsにattribute6データを保存しようとしていますが、アプリがクラッシュしてエラーが発生しています。

[User Defaults] Attempt to set a non-property-list object <null> as an NSUserDefaults/CFPreferences value for key MyKeyName 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object null for key MyKeyName' 
+0

エラーは、キー 'MyKeyName'のオブジェクトが**プロパティリストがサポートするタイプではない**と述べています。オブジェクトプロパティリストを準拠させる必要があります。 – vadian

+0

申し訳ありませんわかりません... – iOS

+0

プロパティリストは 'NSString'、' NSNumber'、 'NSData'、' NSDate'をサポートしています。 ''をサポートされているタイプに変換する必要があります。 – vadian

答えて

1

属性6のデータがDBに書き込まれていることを確認してから、それを空にしないようにしてください。 DBから読み込んだ直後に直接値を保存し、attribute6を空にする場合は、[NSNull null]の値をNSUserDefaultsに保存する前にチェックしてください。NSUserDefaults[NSNull null]のオブジェクトを受け入れません。

編集: コメントから判断すると、値は最初は[NSNull null]になります。したがって、あなたはそれをこのように扱うことができます:

+0

最初に、更新されたバージョンであるため、attribute6は空です。 – iOS

+0

そのため、NSUserDefaultsに保存する際にチェックが必要です。 – nanibir

+0

このNULLを削除する方法とNSUserDefaultsに保存する方法.... – iOS

関連する問題