当前位置: 首页 > 面试题库 >

将[String]存储在NSUserDefaults中

苏翰学
2023-03-14
问题内容

我想将Swift样式字符串数组保存到NSUserDefaults中,但是代码中的“ if”语句通常说returnValue始终为nil。

在稍后的代码中(iOS 8),我想使用“ food + = [” spaghetti“]添加新条目。

var food : [String] {
    get {
        var returnValue : [String]? = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String]
        if returnValue == nil      //Check for first run of app
        {
            returnValue = ["muesli", "banana"]; //Default value
        }
        return returnValue!
    }
    set (newValue) {
        NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
        NSUserDefaults.standardUserDefaults().synchronize()
    }
}

问题答案:

以下代码应帮助您解决问题:

import UIKit

class ViewController: UIViewController {

    var food: [String] {
        get {
            if let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String] {
                return returnValue
            } else {
                return ["muesli", "banana"] //Default value
            }
        }
        set {
            NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
            NSUserDefaults.standardUserDefaults().synchronize()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        print(food) // prints: ["muesli", "banana"] (at first launch)

        food = ["cake"]
        print(food) // prints: ["cake"]

        food += ["spaghetti"]
        print(food) // prints: ["cake", "spaghetti"]

        food = []
        print(food) // prints: []

        NSUserDefaults.standardUserDefaults().setObject(nil, forKey: "food")
        print(food) // prints: ["muesli", "banana"]
    }

}

但是,使用前面的代码,如果您设置food = [],则会遇到问题,因为food不会返回["muesli", "banana"]。为了避免这种情况,您可能更喜欢以下代码:

import UIKit

class ViewController: UIViewController {

    var food: [String] {
        get {
            if let returnValue = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [String] {
                return returnValue == [] ? ["muesli", "banana"] : returnValue
            } else {
                return ["muesli", "banana"] //Default value
            }
        }
        set {
            NSUserDefaults.standardUserDefaults().setObject(newValue, forKey: "food")
            NSUserDefaults.standardUserDefaults().synchronize()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        print(food) // prints: ["muesli", "banana"] (at first launch)

        food = ["cake"]
        print(food) // prints: ["cake"]

        food += ["spaghetti"]
        print(food) // prints: ["cake", "spaghetti"]

        food = []
        print(food) // prints: ["muesli", "banana"]

        NSUserDefaults.standardUserDefaults().setObject(nil, forKey: "food")
        print(food) // prints: ["muesli", "banana"]
    }

}


 类似资料:
  • 问题内容: 我试图存储一个数组,并在需要时填充该数组。 目前,我正在使用: 但是我明白了 致命错误:解开Optional值时意外发现 尝试加载数据时。我不确定问题出在存储或检索中。以前有没有人经历过? 问题答案: 从您的代码中,我看到您正在存储一些数组 并检索一个字符串 类型可能不匹配,您可以存储一种类型并检索另一种类型。 检索使用或查看下面的代码。 要么 如果是数组,我会选择第一个。

  • 问题内容: 我想创建一个属性字符串,然后将其存储在中,然后再次访问它,并将属性字符串分配给。我该怎么办?提前致谢。 问题答案: 您必须将转换为,然后将其存储在中。

  • 如何将查询结果保存在字符串数组中 查询很简单,只有一列,即: 我想要的是将id存储在String数组中,这样我就可以将它们显示为列表视图中的可点击项。

  • 问题内容: 我有一个新闻和一个消息。所述含有选择加入到阵列时teamObjects的的tableView。我想将此数组添加到其中,以便可以从其中包含需要teamObjects的url请求的访问它们。但是我不断得到: “试图为关键团队插入非财产列表对象(“”) 如果有比将其存储在更好的方法,我愿意接受其他建议 方法 我的对象 问题答案: 实际上,您将需要将自定义对象归档到其中,然后将其保存到用户默认

  • 问题内容: 是否可以将图像另存为对象,然后检索以供进一步使用? 问题答案: 注意! 如果您要在iOS8 / XCODE6以下工作,请参阅下面的更新 对于仍在寻找答案的用户,这里提供了“建议”方式的代码,用于将图像保存在NSUserDefaults中。您不应该将图像数据直接保存到NSUserDefaults中! 写入数据: 读取数据: documentsPathForFileName: 对于iOS8

  • 问题内容: 我有一个使用基于JSON的API的应用程序。作为JSON的一部分,通常将值设置为“ null”。这可能很常见: 最近,我尝试在NSUserDefaults中存储从JSON对象转换的杂项NSDictionary层次结构。不幸的是,如果有空数据,它将在IOS中转换为[NSNull null]时引发异常。显然,这不能保存在首选项中。 我想知道以前是否有人为此工作过?我尝试添加一些逻辑以首先从