Ok, Vì vậy, tôi khá mới với Swift và tôi hơi bối rối về những gì tôi đang cố gắng làm, hoặc nếu tôi đi sai hướng. (https://github.com/ashleymills/Reachability.swift)Swift 3: Kiểm tra Internet (Định vị lại) xemDidAppear không
Đây là phương pháp viewDidLoad
tôi:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
checkConnection()
}
sau đó tôi có một chức năng với mã trong từ Dự án GitHub reachability:
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")
}
}
Như bạn có thể thấy, khi có không có internet, đây là mã số:
self.dim(direction: .In, alpha: self.dimLevel, speed: self.dimSpeed)
self.performSegue(withIdentifier: "mainToAlertNoInternet", sender: self)
Dim là lấy từ (http://www.totem.training/swift-ios-tips-tricks-tutorials-blog/ux-chops-dim-the-lights) mainToAlertNoInternet
tải chế độ xem tiếp theo so với chế độ xem hiện tại với độ trong suốt do đó nó là kiểu cảnh báo.
Vì vậy, phân đoạn thứ hai có chế độ xem và nút trên đó. Không có gì ngoạn mục này là những gì được nạp khi không có Internet:
Đó thử lại nút được liên kết với Exit của Segue và chạy chức năng này trong Đầu View Controller:
@IBAction func unwindFromSecondary(segue: UIStoryboardSegue) {
dim(direction: .Out, speed: dimSpeed)
checkInternetConnection()
}
Tôi đã thêm vào hàm mainToAlertNoInternet
để khi nhấp chuột thử lại, nó sẽ quay lại phân đoạn đầu tiên và chạy lại kiểm tra. Tuy nhiên, khi tôi nhấp vào thử lại, tôi nhận được lỗi này:
Warning: Attempt to present on whose view is not in the window hierarchy!
Hy vọng tôi đã giải thích đủ những gì tôi đã thiết lập. Bây giờ đến Câu hỏi:
1) Làm cách nào để khắc phục lỗi này? 2) Tôi có đang làm đúng cách hay có cách nào tốt hơn không?
Đây là những gì tôi muốn:
Tôi muốn kiểm tra kết nối internet vào thời điểm tải ứng dụng. Nếu không có kết nối tôi muốn hiển thị các segue như tôi đã làm. Nếu người dùng nhấp vào Hãy thử đạt được, tôi muốn nó quay trở lại bộ điều khiển đầu tiên và chạy lại kiểm tra và nếu vẫn không có kết nối hiển thị segue như nó đã ban đầu một lần nữa. Tôi muốn đây là một quá trình lặp lại cho đến khi có internet.
Đánh giá cao sự giúp đỡ của bạn. Cảm ơn trước
Edit:
Tôi đã thêm lời gọi hàm trong phương pháp viewDidAppear như vậy:
override func viewDidAppear(_ animated: Bool) {
checkInternetConnection()
}
Tuy nhiên, nó không chạy. Ngoài ra, DIM trong các chức năng unwindFromSecondary
không được gọi khi tôi làm điều này.
Sửa 2:
Chỉ cần thêm dòng này vào viewDidAppear
tôi:
print("Appeared")
này được gọi là ban đầu, nhưng sau đó không một lần nữa.
Câu hỏi:
Làm cách nào để chạy một khi mọi thứ đã được tải lại sau khi giải phóng?
Mọi suy nghĩ?
Cập nhật 3
Ok, vì vậy tôi đã xem xét các câu trả lời dưới đây:
@MarkP trả lời hoạt động tốt. Cảm ơn bạn vì điều đó Tuy nhiên, câu trả lời từ @iSee đã khiến tôi nghĩ rằng có lẽ tôi nên đi theo cách này theo một cách khác.
Tôi đã thêm một Bounty bài này cho một câu trả lời chi tiết mà có thể chỉ cho tôi và giải thích làm thế nào để đạt được những điều sau đây:
Trong ứng dụng của tôi. Tôi cần phải tiếp tục đảm bảo rằng Internet tồn tại (Có thể là Bộ hẹn giờ) trên bất kỳ chế độ xem nào tải. Tôi muốn nó để như cách hiện nay, nếu không có internet, nó sẽ bật lên ViewController với segue này:
performSegue(withIdentifier: "mainToAlertNoInernet", sender: self)
Dường như App Đại biểu sẽ diễn ra nhưng tôi không chắc chắn làm thế nào để đạt được điều này.
Tôi mới phát triển iOS và do đó sẽ đánh giá cao một số giải thích và giảng dạy.
Cảm ơn bạn đã dành thời gian. Được đánh giá cao.
có thể trùng lặp của [có khung nhìn không nằm trong hệ thống phân cấp cửa sổ] (http://stackoverflow.com/a/12320222/2108547) –