领域更新发送到实例的Swift无法识别的选择器
问题描述:
我正在用Realm制作一个简单的列表应用程序,并且我无法更新方法。这是我的代码。领域更新发送到实例的Swift无法识别的选择器
Task.swift
class Task: Object {
dynamic var id = 0
dynamic var name = ""
dynamic var content = ""
dynamic var createdDate = NSDate()
override class func primaryKey() -> String? {
return "id"
}
class func autoIncrement() -> Int{
let realm = try! Realm()
let TaskList = realm.objects(Task.self).sorted(byKeyPath: "id", ascending: true)
let Last = TaskList.last
if TaskList.count == 0{
return 0
} else{
return Last!.id + 1
}
}
}
TaskController.swift
static func updateTask(name:String, content:String, oldTask:Task){
RealmController.updateTask(name:name, content:content, task: oldTask)
//RealmController.getData(taskList: &appDelegate.task)
}
RealmController.swift
static func updateTask(name:String, content:String, task: Task){
let taskId = task.id
let RealTask = realm.objects(Task.self).filter("id == %@", taskId).first
try! realm.write {
RealTask?.name = name
RealTask?.content = content
}
}
错误消息。
2017年2月10日17:13:57.179 RealmTest1 [7156:9710210] - [RealmTest1.EditViewController saveTask:]:无法识别的选择发送到实例0x7fd06351eaa0 2017年2月10日17:13:57.183 RealmTest1 [7156:9710210] ***终止应用程序由于未捕获的异常 'NSInvalidArgumentException' 的,原因是: ' - [RealmTest1.EditViewController saveTask:]:无法识别的选择发送到实例0x7fd06351eaa0'
堆栈跟踪
0 CoreFoundation 0x0000000107c00d4b __exceptionPreprocess + 171<br/>
1 libobjc.A.dylib 0x000000010766221e objc_exception_throw + 48<br/>
2 CoreFoundation 0x0000000107c70f04 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 CoreFoundation 0x0000000107b86005 ___forwarding___ + 1013<br/>
4 CoreFoundation 0x0000000107b85b88 _CF_forwarding_prep_0 + 120<br/>
5 UIKit 0x00000001080268bc -[UIApplication sendAction:to:from:forEvent:] + 83<br/>
6 UIKit 0x00000001081acc38 -[UIControl sendAction:to:forEvent:] + 67<br/>
7 UIKit 0x00000001081acf51 -[UIControl _sendActionsForEvents:withEvent:] + 444<br/>
8 UIKit 0x00000001081abe4d -[UIControl touchesEnded:withEvent:] + 668<br/>
9 UIKit 0x0000000108094545 -[UIWindow _sendTouchesForEvent:] + 2747<br/>
10 UIKit 0x0000000108095c33 -[UIWindow sendEvent:] + 4011<br/>
11 UIKit 0x00000001080429ab -[UIApplication sendEvent:] + 371<br/>
12 UIKit 0x000000010882f72d __dispatchPreprocessedEventFromEventQueue + 3248<br/>
13 UIKit 0x0000000108828463 __handleEventQueue + 4879<br/>
14 CoreFoundation 0x0000000107ba5761 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17<br/>
15 CoreFoundation 0x0000000107b8a98c __CFRunLoopDoSources0 + 556<br/>
16 CoreFoundation 0x0000000107b89e76 __CFRunLoopRun + 918<br/>
17 CoreFoundation 0x0000000107b89884 CFRunLoopRunSpecific + 420<br/>
18 GraphicsServices 0x000000010d8caa6f GSEventRunModal + 161<br/>
19 UIKit 0x0000000108024c68 UIApplicationMain + 159<br/>
20 RealmTest1 0x000000010691518f main + 111<br/>
21 libdyld.dylib 0x000000010a44d68d start + 1<br/>
重新启动应用程序后,内容已被更改。 我该如何解决它?
static func updateTask(name:String, content:String, task: Task){
let taskId = task.id
let RealTask = realm.objects(Task.self).filter("id == %@", taskId).first
try! realm.write {
RealTask?.name = name
RealTask?.content = content
}
}
到
static func updateTask(name:String, content:String, task: Task){
let taskId = task.id
if let RealTask = realm.objects(Task.self).filter("id == %@", taskId).first {
try! realm.write {
RealTask.name = name
RealTask.content = content
}}
}
答
试图改变你的方法。问题在于-[UIControl sendAction:to:forEvent:]
正在对未实现该对象的对象调用方法。这有两个正常的原因:
- 注册触摸处理程序时,您只是传入错误的对象。
- 您注册为处理程序的对象已被释放,并且一些不相关的对象已分配到相同的位置。在“方案 - >运行 - >诊断”中启用“僵尸对象”将以更多信息的方式使这种情况失败。
答
堆栈跟踪似乎是无关的任何您发布的代码
错误消息说'-saveTask:'消息正在发送到'EditViewController'。那个班是否实施该方法?你只显示了一个'updateTask'方法的代码。 – bdash