swift 3(xCode8-beta6)上的可达性问题
Posted
技术标签:
【中文标题】swift 3(xCode8-beta6)上的可达性问题【英文标题】:Reachability issue on swift 3(xCode8-beta6) 【发布时间】:2016-08-24 18:02:18 【问题描述】:我目前正在使用 xCode8 beta6(swift3) 中的可达性库开发一个项目。 我想我在我的项目中正确地实现了 Reachability.swift。
顺便说一句,当我调用reachability.startNotifier()
时,应用程序在Reachability.swift 的以下行中崩溃。
let reachability = Reachability()!
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:",name: ReachabilityChangedNotification,object: reachability)
do
try reachability.startNotifier()
catch
print("could not start reachability notifier")
这是我在日志中看到的内容。
*** NSForwarding:警告:“WebClient”类的对象 0x10d939668 未实现 methodSignatureForSelector: -- 前面的麻烦无法识别的选择器 +[WebClient 可达性改变:]
当然,我确实实现了reachabilityChanged选择器功能。
func reachabilityChanged(note: NSNotification)
let reachability = note.object as! Reachability
if reachability.isReachable
if self.pendingSurvey == true
....
我花了很多时间寻找原因,但我无法弄清楚。
【问题讨论】:
【参考方案1】:在 Swift 3 中,func reachabilityChanged(note: NSNotification)
的 Objective-C 选择器变为 reachabilityChangedWithNote:
。 (这在某些测试版中可能会有所不同。)因此,Reachability
运行时找不到选择器reachabilityChange:
的方法并崩溃。
通常你在 Swift 3 中为选择器 reachabilityChange:
声明一个 Swift 方法为:
func reachabilityChanged(_ note: NSNotification)
//
或者使用@objc
是另一种方式:
@objc(reachabilityChange:)
func reachabilityChanged(note: NSNotification)
//
【讨论】:
我尝试更新代码,但还是不行。 它像往常一样导致崩溃。 看来Reachability 还是找不到reachabilityChanged: 方法。 @star99,您可能在迁移时损坏了其他部分,或者 Reachability 可能与 Swift 3 存在一些未知的不兼容问题。无论如何,如果没有您提供更多上下文,我不能再说什么了。以上是关于swift 3(xCode8-beta6)上的可达性问题的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 从 Swift 类启动的可观察对象不会更新 ContentView() 上的 @ObservedObject