【问题标题】:What's wrong with my UserDefault code for global Array?我的全局数组的 UserDefault 代码有什么问题?
【发布时间】:2017-10-06 21:41:19
【问题描述】:

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

【问题讨论】:

标签: swift xcode userdefaults


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我去看看!关于数组大小,它只包含文本。存储起来会很大吗?应该改用什么?
【解决方案2】:

使用set 而不是setValue

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

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

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 2014-12-07
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多