Ios 使用tableView滑动功能从NSUserDefaults中删除项目时出错
我尝试使用tableView滑动功能从NSUserDefaults中删除项目。但当我测试我的应用程序时,它总是在点击“删除”后崩溃 定义变量并从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
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.dylibpthread_kill+90
帧#2:0x00000001084a519a libsystem_sim_c.dylib
abort+129
帧#3:0x0000000108759481 libc++abi.dylibabort#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 UIKitUIApplicationMain+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
,但目的是肯定的