Swift 什么';全局数组的用户默认代码有什么问题?
试图通过UserDefault存储数组,但Xcode给了我一个错误。错误消息是线程1:SIGABRT,控制台显示“NSInvalidArgumentException,原因:尝试插入非属性列表对象”。我以前使用以下代码将数据存储在阵列中:Swift 什么';全局数组的用户默认代码有什么问题?,swift,xcode,userdefaults,Swift,Xcode,Userdefaults,试图通过UserDefault存储数组,但Xcode给了我一个错误。错误消息是线程1:SIGABRT,控制台显示“NSInvalidArgumentException,原因:尝试插入非属性列表对象”。我以前使用以下代码将数据存储在阵列中: let tempRecipe = GlobalFavorites(recipeImageObject: "", recipeTextObject: "", recipeHeaderObject: "", favoriteRecipeArray: [global
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中编写数组有关,因为在我看来,我试图存储一些不存在的东西。或者我遗漏了什么?如果
globalFavoriteRecipes.FavoriteReciperary
是一个自定义对象数组,则需要确保正确存档和取消存档它们
这篇文章还涉及到一些其他选项,因为NSUserDefaults并不是存储可能会变得相当大的数组的最佳位置,在本例中,它听起来可能会根据变量名而变得相当大。使用
set
而不是setValue
:
UserDefaults.standard.set(globalfavoritecipes.favoriterereciparray,forKey:“savedFavoriteArray”)
但是,我同意@Jake的观点,它应该只用于存储少量数据,而不是大型数组。快乐编码 是否愿意分享错误?顺便说一句-如果您查看
UserDefaults
的文档,您将不会看到setValue(uuwy:forKey:)
方法列出。所以不要使用它。使用列出的一种方法存储值。您需要使用set(\uuquo:forKey:)
methodUserDefaults.standard.set(globalFavoriteRecipes.FavoriteReciperaRay,forKey:“savedFavoriteArray”)
@rmaddy他使用的是KeyValueCoding方法@LeoDabus是的,我知道,但我的观点是它们不应该是。谢谢,我会查出来的!关于数组大小,它只包含文本。这对商店来说会很大吗?应该用什么来代替?