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)")
}