Ios 使用tableView滑动功能从NSUserDefaults中删除项目时出错

Ios 使用tableView滑动功能从NSUserDefaults中删除项目时出错,ios,uitableview,swift,nsuserdefaults,Ios,Uitableview,Swift,Nsuserdefaults,我尝试使用tableView滑动功能从NSUserDefaults中删除项目。但当我测试我的应用程序时,它总是在点击“删除”后崩溃 定义变量并从NSUserDefaults加载数据: var exercises:NSMutableArray = NSMutableArray(); func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRow

我尝试使用tableView滑动功能从NSUserDefaults中删除项目。但当我测试我的应用程序时,它总是在点击“删除”后崩溃

定义变量并从NSUserDefaults加载数据:

 var exercises:NSMutableArray = NSMutableArray();
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {

        self.deleteItem(exercises[indexPath.row])

        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    }
}

func deleteItem(sender: AnyObject) {
    exercises.removeObject(sender)

    var userDefaults:NSUserDefaults = NSUserDefaults.standardUserDefaults()
    userDefaults.setObject(exercises, forKey: "exercisesList")
    userDefaults.synchronize()
}

删除功能:

 var exercises:NSMutableArray = NSMutableArray();
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {

        self.deleteItem(exercises[indexPath.row])

        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    }
}

func deleteItem(sender: AnyObject) {
    exercises.removeObject(sender)

    var userDefaults:NSUserDefaults = NSUserDefaults.standardUserDefaults()
    userDefaults.setObject(exercises, forKey: "exercisesList")
    userDefaults.synchronize()
}
编辑:错误:

 var exercises:NSMutableArray = NSMutableArray();
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {

        self.deleteItem(exercises[indexPath.row])

        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    }
}

func deleteItem(sender: AnyObject) {
    exercises.removeObject(sender)

    var userDefaults:NSUserDefaults = NSUserDefaults.standardUserDefaults()
    userDefaults.setObject(exercises, forKey: "exercisesList")
    userDefaults.synchronize()
}
(lldb)英国电信 *线程#1:tid=0x190c34,0x0000000108715282 libsystem_kernel.dylib
\uupthread_kill+10,队列='com.apple.main thread',停止原因=信号SIGABRT
帧#0:0x0000000108715282 libsystem_kernel.dylib
uu pthread_kill+10 帧#1:0x00000001087484c3 libsystem_pthread.dylib
pthread_kill+90
帧#2:0x00000001084a519a libsystem_sim_c.dylib
abort+129 帧#3:0x0000000108759481 libc++abi.dylib
abort#u消息+257
帧#4:0x00000001087813d5 libc++abi.dylib
default_terminate_handler()+267 帧#5:0x0000000107c1de19 libobjc.A.dylib
\u objc\u terminate()+103
帧#6:0x000000010877eb01 libc++abi.dylib
std::u终止(void(*)()+8 帧#7:0x000000010877e7aa libc++abi.dylib
\uuucxa\uRethrow+99
帧#8:0x0000000107c1dd2c libobjc.A.dylib
objc_exception_rethrow+40 帧#9:0x000000010600453e核心基础
CFRunLoopRunSpecific+654
帧#10:0x000000010a1d09f0图形服务
GSEventRunModal+161 帧#11:0x0000000106965420 UIKit
UIApplicationMain+1282
*帧#12:0x0000000105ee2c5e进度
AppDelegate的顶层代码+78。swift:12 帧#13:0x0000000105ee2c9a进度
main+42位于AppDelegate。swift:0
第14帧:0x00000001083f7145 libdyld.dylib
start+1

此行

var exercisesListFromUserDefaults:NSMutableArray? = userDefaults.objectForKey("exercisesList") as? NSMutableArray
是一个问题,因为数组将不可变。用户默认值总是返回不可变的对象。在更改该数组并将其存储回用户默认值之前,需要创建该数组的可变数组(副本)

var myMutableArray = NSMutableArray(array: myImmutableArray)

在我编辑的帖子中显示它崩溃的行、异常消息和堆栈跟踪OK。你是说这个吗?很接近,但这并没有告诉我们它在哪条线路上崩溃或者什么类型的异常。我是swift的新手,所以你能告诉我在哪里可以找到它吗?像这样?NSArray*newArray=[NSMutableArray arrayWithArray:oldArray];这是obj-c,应该全部引用
NSMutableArray
,而不是
NSArray
,但目的是肯定的