好的,所以我对Swift来说很新,对于我正在尝试做什么,或者如果我走错了方向,我有点困惑。 (https://github.com/ashleymills/Reachability.swift)Swift 3:检查Internet(Reocurring)viewDidAppear不是
这里是我的viewDidLoad
方法:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
checkConnection()
}
然后我有一个函数从可达GitHub的项目代码:
func checkConnection() {
//declare this property where it won't go out of scope relative to your listener
let reachability = Reachability()!
reachability.whenReachable = { reachability in
// this is called on a background thread, but UI updates must
// be on the main thread, like this:
DispatchQueue.main.async {
if reachability.isReachableViaWiFi {
print("Reachable via WiFi")
} else {
print("Reachable via Cellular")
}
}
}
reachability.whenUnreachable = { reachability in
// this is called on a background thread, but UI updates must
// be on the main thread, like this:
DispatchQueue.main.async {
self.dim(direction: .In, alpha: self.dimLevel, speed: self.dimSpeed)
self.performSegue(withIdentifier: "mainToAlertNoInternet", sender: self)
}
}
do {
try reachability.startNotifier()
} catch {
print("Unable to start notifier")
}
}
正如你所看到的,当有没有互联网,这是代码:
self.dim(direction: .In, alpha: self.dimLevel, speed: self.dimSpeed)
self.performSegue(withIdentifier: "mainToAlertNoInternet", sender: self)
暗淡是取自(http://www.totem.training/swift-ios-tips-tricks-tutorials-blog/ux-chops-dim-the-lights)mainToAlertNoInternet
以透明方式加载当前视图的下一个视图,因此它是一种警告样式。
因此,第二个segue上有一个视图和一个按钮。没有壮观这是当没有互联网什么是装:
那再试一次按钮链接到Segue公司的退出并运行在第一个视图控制器此功能:
@IBAction func unwindFromSecondary(segue: UIStoryboardSegue) {
dim(direction: .Out, speed: dimSpeed)
checkInternetConnection()
}
我在函数mainToAlertNoInternet
中添加了这样的内容,当他们再次单击时,它会返回到第一个segue并再次运行测试。然而,当我点击再试一次,我得到这个错误:
Warning: Attempt to present on whose view is not in the window hierarchy!
希望我已经解释够我所成立。现在的问题:
1)我该如何解决这个错误? 2)我是以正确的方式做还是有更好的方法?
这就是我想要的:
我要检查Internet连接的那一刻应用程序加载。如果没有连接,我想像我一直在做的那样显示segue。如果用户点击尝试增益,我希望它返回到第一个控制器并再次运行检查,并且如果仍然没有连接显示继续,就像它再次执行一样。我希望这是一个重复的过程,直到有互联网。
感谢您的帮助。在此先感谢
编辑:
我已经添加了函数调用的方法ViewDidAppear像这样:
override func viewDidAppear(_ animated: Bool) {
checkInternetConnection()
}
但是,它不运行。当我这样做时,unwindFromSecondary
函数中的DIM也不会被调用。
编辑2:
刚加入这一行到我viewDidAppear
:
print("Appeared")
这被最初称,但随后不再。
问:
我如何获得一个功能,一旦一切都在unwindSegue后再次加载运行?
有什么想法?
更新3
好了,我已经看了看下面的答案:
@MarkP回答工作正常。谢谢你 但是,@iSee的答案让我想到也许我应该以不同的方式来解决这个问题。
我加入悬赏这个职位的详细解答,可以告诉我,并解释如何实现以下目标:
在我的应用程序。我需要确保互联网存在(也许一个定时器)在任何加载视图。
performSegue(withIdentifier: "mainToAlertNoInernet", sender: self)
看来,在App代表会的地方,但我不能确定如何实现:使像目前这样,如果没有互联网,将弹出的ViewController这个赛格瑞我想它这个。
我是iOS开发新手,因此会对一些解释和教导感激。
谢谢你的时间。非常感谢。
可能的复制[其视图不在窗口层次结构中](http://stackoverflow.com/a/12320222/2108547) –