2017-10-06 30 views
-3

試圖通過UserDefault存儲數組,但Xcode給了我一個錯誤。該錯誤消息是線程1:信號SIGABRT,並且控制檯顯示「NSInvalidArgumentException,原因:嘗試插入非屬性列表對象」。我以前使用此代碼在陣列中存儲數據:我的用於全局數組的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

順便說一句 - 如果你看看'UserDefaults'的文檔,你將看不到列出的'setValue(_:forKey :)'方法。所以不要使用它。使用一個列出的方法來存儲值。 – rmaddy

+0

您需要使用'set(_:forKey:)'方法。 UserDefaults.standard.set(globalFavoriteRecipes.favoriteRecipeArray,forKey:「savedFavoriteArray」)https://developer.apple.com/documentation/foundation/userdefaults/1414067-set –

回答

0

如果globalFavoriteRecipes.favoriteRecipeArray是自定義對象的數組,你需要確保你的歸檔並妥善解除存檔他們。 Refer to this StackOverflow post.

這篇文章也涉及到其他一些選項,因爲NSUserDefaults不是存儲數組的最佳位置,它可能會變得相當大,這聽起來像是在這種情況下基於變量名稱。

+0

謝謝,我會檢查出來!關於數組大小,它只包含文本。這對於大商店來說會是什麼?應該用什麼來代替? –

0

使用setsetValue

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

不過,我同意@Jake,這應該只是用來存儲少量數據,而不是一個大陣。快樂的編碼!