线程1:信号SIGABRT变异方法发送到不可变对象'

时间:2016-07-29 02:21:30

标签: swift3 ios10

我是Swift编程的新手,并且一直致力于一个待办事项列表应用程序。我正在尝试使用永久数据存储来保存用户输入的信息,但我不断收到错误"Thread 1: signal SIGABRT" 。当我检查输出日志时,我看到错误

  

"因未捕获的异常而终止应用   ' NSInternalInconsistencyException',原因:' - [__ NSCFArray   insertObject:atIndex:]:发送到不可变对象的变异方法'"

我的代码如下。我使用一个简单的文本框和一个按钮:

@IBOutlet var text1: UITextField!

@IBAction func button1(_ sender: AnyObject) {

    let listObject = UserDefaults.standard.object(forKey: "lists")

    var items:NSMutableArray

   if let tempitems = listObject as? NSMutableArray {

        items = tempitems

      items.addObjects(from: [text1.text!])

  } else {

        items = [text1.text!]

    }

    UserDefaults.standard.set(items, forKey: "lists")

    text1.text = ""

}

1 个答案:

答案 0 :(得分:0)

崩溃正是它的意思:你不能改变不可变对象。试试这个:

var items: NSMutableArray!

if let listObject = UserDefaults.standard.object(forKey: "lists") as? NSArray {
    items = listObject.mutableCopy() as! NSMutableArray
} else {
    items = NSMutableArray()
}

items.addObjects(from: [text1.text!])