【问题标题】:NSThread: Selector not foundNSThread:未找到选择器
【发布时间】:2014-08-11 13:31:21
【问题描述】:

我有点困惑,为什么我的 NSThread 由于运行时错误而无法使用选择器实例化

target does not implement selector (*** -[FileSearcher processFilesAsync:])

函数是这样定义的

func processFilesAsync(#data: [String])

NSThread 会以这种方式创建:

NSThread(target: self, selector: "processFilesAsync:", object: itemsPerThread[i])

"itemsPerThread" 只是一个以字符串数组为值的字典。

据我所知,这应该可以工作,因为我要调用的方法定义了一个参数,并且我传递给 NSThread 的 init() 方法的选择器表明目标方法只需要一个参数。

我已经尝试过使用 Swift 的“选择器”类型而不是仅使用字符串,但这并不奏效。我还尝试将方法的类型从“[String]”更改为“AnyObject”,这也不起作用。

有人知道可能出了什么问题吗?

以上所有代码都在同一个类中。

我正在使用 Xcode 6 Beta 5。

编辑 我发现这与参数有关。我实现了一个没有参数的虚拟方法,并尝试将其设置为目标并且它有效。一旦我修改它以使用参数 -> 与上面相同。

【问题讨论】:

  • 您有什么理由尝试使用 NSThread 而不是 GCD 吗?
  • 我试过 GCD。由于可能要处理数十万个文件,我想尝试另一种方法:并行处理它们。

标签: cocoa swift


【解决方案1】:

找到了。我所要做的就是将参数的类型从AnyObject 更改为AnyObject?。它甚至适用于特殊类型(在我的例子中是[String]? 而不是[String])。

当然,因为你可以把它称为nil作为参数...

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多