2017-10-06 7 views
-3

UserDefaultで配列を保存しようとしましたが、Xcodeでエラーが表示されます。エラーメッセージはスレッド1:シグナルSIGABRTで、コンソールには "NSInvalidArgumentException、reason:非プロパティリストオブジェクトを挿入しようとしています"と表示されます。私は以前このコードを使用して配列にデータを格納しています:グローバルアレイ用の私のUserDefaultコードに何が問題になっていますか?

let tempRecipe = GlobalFavorites(recipeImageObject: "", recipeTextObject: "", recipeHeaderObject: "", favoriteRecipeArray: [globalFavoriteRecipes])     

    tempRecipe.recipeHeaderObject = self.recipeClassArray[self.currentView].recipeHeaderObject  

    tempRecipe.recipeTextObject = self.recipeClassArray[self.currentView].recipeTextObject 

    tempRecipe.recipeImageObject = self.recipeClassArray[self.currentView].recipeImageObject 

    globalFavoriteRecipes.favoriteRecipeArray.append(tempRecipe) 

これは問題ありません。 UserDefaultでエラーを表示するコードを次に示します。

UserDefaults.standard.setValue(globalFavoriteRecipes.favoriteRecipeArray, forKey: "savedFavoriteArray") 

これはグローバル配列であり、配列全体を格納したいと考えています。私はUserDefaultに配列を書き込む方法と関係があると思います。なぜなら、私にはそこにないものを格納しようとしているようだからです。それとも私は何が欠けていますか?

+2

エラーをシェアするにはどうなりますか? – rmaddy

+2

BTW - 'UserDefaults'のドキュメントを見ると' setValue(_:forKey:) 'メソッドが表示されません。だから、それを使わないでください。リストされた方法を使用して値を格納します。 – rmaddy

+0

'set(_:forKey:)'メソッドを使う必要があります。 'UserDefaults.standard.set(globalFavoriteRecipes.favoriteRrayArray、forKey:" savedFavoriteArray ")' https://developer.apple.com/documentation/foundation/userdefaults/1414067-set –

答えて

0

globalFavoriteRecipes.favoriteRecipeArrayがカスタムオブジェクトの配列である場合は、それらを適切にアーカイブして保管する必要があります。 Refer to this StackOverflow post.

NSUserDefaultsは、潜在的にかなり大きくなる可能性のある配列を格納するのに最適な場所ではないため、このポストもいくつかのオプションに当てはまります。この場合、変数名に基づいている可能性があります。

+0

ありがとう、私はそれをチェックアウトします!配列のサイズについては、テキストのみが含まれています。それは大きなものになるのだろうか?代わりに何を使うべきですか? –

0

使用setないsetValue

UserDefaults.standard.set(globalFavoriteRecipes.favoriteRecipeArray, forKey: "savedFavoriteArray")

しかし、私はこれが唯一の少量のデータではなく、大規模な配列を格納するために使用する必要があり、@Jakeに同意します。ハッピーコーディング!

関連する問題