尝试通过UserDefault存储数组,但Xcode给我一个错误。错误消息是线程1:信号SIGABRT,控制台说" NSInvalidArgumentException,原因:尝试插入非属性列表对象"。我之前使用以下代码将数据存储在数组中:
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中编写数组的方式有关,因为对我而言,似乎我试图存储那些不存在的东西。或者我错过了什么?
答案 0 :(得分:0)
如果globalFavoriteRecipes.favoriteRecipeArray
是一组自定义对象,则需要确保正确归档和取消归档。 Refer to this StackOverflow post.
该帖子还涉及其他一些选项,因为NSUserDefaults不是存储可能会变得非常大的数组的最佳位置,在这种情况下听起来可能基于变量名称。
答案 1 :(得分:0)
使用set
而不是setValue
:
UserDefaults.standard.set(globalFavoriteRecipes.favoriteRecipeArray, forKey: "savedFavoriteArray")
但是,我同意@Jake,这应该只用于存储少量数据,而不是大数据。快乐的编码!