【问题标题】:NSUserDefaults for Today Extension not saving data, iOS swift. Can't figure out what I am doing wrong hereToday Extension 的 NSUserDefaults 不保存数据,iOS swift。无法弄清楚我在这里做错了什么
【发布时间】:2015-08-20 15:49:36
【问题描述】:

我正在尝试在我的应用和 Today Extension 之间共享 [[String:String]] 对象。

在我的应用程序中,我正在保存这样的对象:

override func viewWillDisappear(animated: Bool) {
    // Save all data and update Today Extension
    // 1) Save selectedStations as Dictionary to NSUserDefaults
    if var sharedDefaults = NSUserDefaults(suiteName: "group.xxx.xxx") {
        // Save to userDefaults (1) stationName, (2) stationLine, (3) id, (4) statnId, (5) subwayId
        var arrayOfDic:[[String:String]] = []
        for station in selectedStations {
            // Organize data to pass to widget
            let name: String     = station.name     ?? ""
            let line: String     = station.line     ?? ""
            let id: String       = station.id       ?? ""
            let statnId: String  = station.statnId  ?? ""
            let subwayId: String = station.subwayId ?? ""

            // Create dictionary
            let dic = [
                "name"     : name,
                "line"     : line,
                "id"       : id,
                "statnId"  : statnId,
                "subwayId" : subwayId
            ]

            // Append to array
            arrayOfDic.append(dic)
        }
        // Save to NSUserDefaults
        sharedDefaults.setObject(arrayOfDic, forKey: "selectedStations")
        println("    saved:\(arrayOfDic)")
        sharedDefaults.synchronize()
    }
    // 2) Refresh Today Extension
}

在同一个 .swift 文件中,我正在像这样检索“ViewDidLoad”中的数据:

override func viewDidLoad() {
    super.viewDidLoad()
    if var sharedDefaults = NSUserDefaults(suiteName: "group.xxx.xxx") {
        sharedDefaults.synchronize()
        if let arrayOfDic = NSUserDefaults().objectForKey("selectedStations") as? [[String:String]] {
            println("   fetched:\(arrayOfDic)")
        }
    }
}

但我意识到

println("    saved:\(arrayOfDic)")

记录我要保存的内容,但是

println("   fetched:\(arrayOfDic)")

没有记录任何东西。这部分似乎为零:

if let arrayOfDic = NSUserDefaults().objectForKey("selectedStations") as? [[String:String]] 

我的代码错了吗??

【问题讨论】:

    标签: ios xcode swift nsuserdefaults today-extension


    【解决方案1】:

    问题出在这行代码:

    if var sharedDefaults = NSUserDefaults(suiteName: "group.xxx.xxx")
    

    再想一想你到底在做什么?您正在创建一个新的 NSUserDefaults 实例。而您需要的是获取在 viewWillDisappear 方法中创建的引用。

    我的建议是实施 sharedDefaults = NSUserDefaults(suiteName: "group.xxx.xxx") 在两个函数之外(让它说实例变量)

    稍后在 viewDidLoad 中实现以下内容:

    if let sharedDefaults = sharedDefaults 
    

    而不是sharedDefaults = NSUserDefaults(suiteName: "group.xxx.xxx")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多