iOS Swift错误:执行被中断,原因:信号SIGABRT

时间:2015-03-04 20:07:58

标签: ios swift

我正在尝试在游乐场中执行以下代码。相当,我同时处理变量bmul但错误只显示在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

1 个答案:

答案 0 :(得分:4)

我无法告诉你为什么第一个工作而第二个工作没有 - 这可能只是游乐场的一个怪癖,时间和延迟将NSUserDefaults持久存储到磁盘上。

然而,您的问题是valueForKey(并且您应该使用objectForKey)返回不可变对象 - 因此bmul实际上将是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")
 }