Tôi có một ứng dụng iOS có kết nối với máy chủ. Nếu chúng tôi bị ngắt kết nối, tôi muốn có thể loại bỏ các bộ điều khiển chế độ xem hàng đầu để quay lại bộ điều khiển chế độ xem "kết nối với máy chủ". Vấn đề là một sự ngắt kết nối có thể xảy ra bất cứ lúc nào, kể cả trong quá trình chuyển đổi giữa các bộ điều khiển xem.Làm cách nào để loại bỏ trình điều khiển chế độ xem bất kỳ lúc nào (ngay cả trong quá trình chuyển đổi) hoặc khi nào an toàn để loại bỏ trình điều khiển chế độ xem?
Quan điểm điều khiển hệ thống phân cấp là như vậy:
ConnectingToServerViewController
SignInViewController
MainAppViewController
- điều khiển xem khác
Khi một ngắt được phát hiện tôi muốn hệ thống phân cấp nhằm thu gọn lại:
ConnectingToServerViewController
Vì vậy, khi một ngắt được phát hiện, phương pháp này được gọi là trên ConnectingToServerViewController
bỏ bất cứ điều gì mà nó đã trình bày và quay trở lại để cố gắng kết nối đến máy chủ:
- (void)restartSession
{
if (self.presentedViewController) {
[self dismissViewControllerAnimated:NO completion:nil];
}
}
Tuy nhiên, nếu tôi cố gắng loại bỏ trong khi chuyển đổi chế độ xem đang xảy ra, tôi nhận được các lỗi như
*** Assertion failure in -[UIWindowController transition:fromViewController:toViewController:target:didEndSelector:], /SourceCache/UIKit/UIKit-2380.17/UIWindowController.m:211
attempt to dismiss modal view controller whose view does not currently appear. self = <YYYYYViewController: 0x2089c8a0> modalViewController = <XXXXXViewController: 0x208e6610>
attempt to dismiss modal view controller whose view does not currently appear. self = <WWWWWWViewController: 0x1fd9e990> modalViewController = <YYYYYViewController: 0x2089c8a0>
Việc đầu tiên trong số đó sẽ sụp đổ các ứng dụng, thứ hai sẽ không bỏ qua bất cứ điều gì và tiếp tục hiển thị bộ điều khiển xem trình bày hiện tại.
Suy nghĩ:
- chậm trễ sẽ không làm việc vì chúng ta không biết khi nào bắt đầu sự chậm trễ
- là có một cách để theo dõi khi xem hiệu ứng chuyển tiếp hoàn thành?
- tất cả chế độ xem sẽ ghi đè lên bộ điều khiển sẽAppear, didAppear và cảnh báo ứng dụng khi nó an toàn để loại bỏ?
- có lẽ thay vì bỏ qua, tôi chỉ nên đặt bộ điều khiển chế độ xem gốc mới?
- Tôi đã đảm bảo rằng tất cả chế độ xem bị ghi đè (sẽ | đã) (dis)? Các phương thức xuất hiện gọi phương thức siêu phù hợp.
- Bất kỳ giải pháp nào yêu cầu tất cả các bộ điều khiển chế độ xem ghi đè chế độ xem (đã làm) sẽ xuất hiện các phương pháp để theo dõi các âm thanh của nhà nước như nó có thể gây ra vấn đề nếu chúng ta quên đặt lớp cơ sở cho bộ điều khiển chế độ xem mới.
nếu bạn có thể đặt bất kỳ biến cờ nào trong viewController và khi bạn bị ngắt kết nối khỏi máy chủ thì nếu chế độ xem không được tải thì bạn có thể thay đổi cờ từ phương thức restrtSesssion. để khi xem tải, nó sẽ tự động loại bỏ nó. bạn có thể sử dụng một số logic như thế ... hy vọng nó sẽ giúp .. –
Tôi cảm động khi điều này gần cuối. Tôi muốn tránh các giải pháp yêu cầu tất cả các bộ điều khiển xem phải phân lớp một lớp viewcontroller đặc biệt chỉ để theo dõi trạng thái. –
Điều gì về việc loại bỏ nó với một sự chậm trễ hoặc trên hàng đợi chính bằng cách đặt bỏ qua bên trong: NSOperationQueue.mainQueue(). AddOperationWithBlock {// dismiss} // swift code –