我正在尝试在游乐场中执行以下代码。相当,我同时处理变量bm
和ul
但错误只显示在ul
import UIKit
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject([], forKey: "bookmarks")
defaults.setObject([], forKey: "urls")
var bm : NSMutableArray = defaults.valueForKey("bookmarks") as NSMutableArray
var ul : NSMutableArray = defaults.valueForKey("urls") as NSMutableArray
bm.addObject("Google") //--->Works
ul.addObject("http://google.com") //--->Oops, No
答案 0 :(得分:4)
我无法告诉你为什么第一个工作而第二个工作没有 - 这可能只是游乐场的一个怪癖,时间和延迟将NSUserDefaults持久存储到磁盘上。
然而,您的问题是valueForKey
(并且您应该使用objectForKey
)返回不可变对象 - 因此bm
和ul
实际上将是NSArray
实例,您不能简单地将它们转换为NSMutableArray
。当你尝试这样做并改变对象时,你会崩溃。
您需要创建数组的可变副本。
var bm=defaults.objectForKey("bookmarks") as NSArray?
if bm != nil {
var bmCopy=bm!.mutableCopy() as NSMutableArray
bmCopy.addObject("Google")
defaults.setObject(bmCopy, forKey:"bookmarks")
}