NSUserDefaults for Today Extensions在iOS 8 beta 5中被破坏了吗?



My Today Extensions在beta 4上工作得很好,我在Today Extensions第一次加载时实现了一个简单的缓存。

let defaults = NSUserDefaults(suiteName: "group.ReadWidget") // app group 
var feed = [String: String]()
override func viewDidLoad() {
    getCache()
    // The feed is empty
}
func parseRSS() {
    ...
    // Parse in background
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
          self.parser = NSXMLParser(contentsOfURL:NSURL(string:url))
          self.parser.delegate = self
          self.parser.parse() // populate the feed
          self.saveCache()    // Save the feed
          ...
        })
    })
}
func saveCache() {
    defaults.setObject(feed, forKey:"feed")
    defaults.synchronize()
}
func getCache() {
    if defaults.objectForKey("feed") {
        feed = defaults.dictionaryForKey("feed") as [String : String]
    }
    else {
        feed = [:]
    }
}

在beta 5中,在saveCache()之后,当getCache()回到今天扩展重新加载时,我总是得到一个空字典。

我使用NSUserDefaults(suiteName:...)来存储缓存。我也试过NSUserDefaults.standardUserDefaults(),结果是一样的。

btw,哪个NSUserDefaults是加载和保存缓存的首选方法?缓存不能与主应用共享。

这行得通:

var defaults = NSUserDefaults.standardUserDefaults()
var feed = [String:String]()
func getCache() {
    if defaults.objectForKey("feed") {
        feed = defaults.dictionaryForKey("feed") as [String : String]
    }
    else {
        feed = [:]
    }
    println("feed: (feed)")
}

最新更新