我的UserDefault全局数组代码出了什么问题?

时间:2017-10-06 21:41:19

标签: swift xcode userdefaults

尝试通过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中编写数组的方式有关,因为对我而言,似乎我试图存储那些不存在的东西。或者我错过了什么?

2 个答案:

答案 0 :(得分:0)

如果globalFavoriteRecipes.favoriteRecipeArray是一组自定义对象,则需要确保正确归档和取消归档。 Refer to this StackOverflow post.

该帖子还涉及其他一些选项,因为NSUserDefaults不是存储可能会变得非常大的数组的最佳位置,在这种情况下听起来可能基于变量名称。

答案 1 :(得分:0)

使用set而不是setValue

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

但是,我同意@Jake,这应该只用于存储少量数据,而不是大数据。快乐的编码!