iOS swift调用带选择器的Objective-C方法失败

时间:2017-03-08 12:06:20

标签: ios objective-c swift

我正在使用 Swift 3 iOS 开发一个应用程序,需要一个 Objective-C 库来连接一些服务。这个库有一些需要回调函数的方法,该方法有效,因为在库的日志中我可以看到数据是接收的。

问题是接下来,当我将 nil 传递给选择器时我没有任何问题,但是当我放置一个函数时,我得到了下一个错误:

2017-03-08 12:30:51.792 ios-example[1095:15243] *** NSForwarding: warning: object 0x608000227d20 of class 'ios-example.ConnectionSettings' does not implement methodSignatureForSelector: -- trouble ahead
Unrecognized selector -[ios-example.ConnectionSettings performSelectorOnMainThread:withObject:waitUntilDone:]

代码是这样的:

导入基金会

class ConnectionSettings {

    var _service : ServiceCall?

    @objc func getName(message : StringMessage) {
        print("name : \(message.data)")
    }

    init() {
        self._service = Services.makeService(RB_SERVICE_NAME, 
                                            responseTarget: self, 
                                            selector: #selector(self.getName)))!)
        self._service.send();
    }
}

我认为问题很容易解决,但我不知道该怎么做。有人可以帮帮我吗?

谢谢:)

1 个答案:

答案 0 :(得分:0)

错误消息告诉您库最终调用-[ios-example.ConnectionSettings performSelectorOnMainThread:withObject:waitUntilDone:],这是NSObject上定义的Objective-C选择器。您的类需要是NSObject

的子类
class ConnectionSettings: NSObject { ... }

修改

您遇到的第二个问题是传递给getName方法的对象没有data选择器。实际上,看起来您正在传递Service对象。