7

Tôi có một đại biểu/xử lý mà tôi đã thực hiện trên UIViewControllers của tôi để xử lý thời gian chờ cho một webservice từ xa. Khi một yêu cầu được thực hiện để webservice của tôi, và một mã http timeout được trả lại, các đại biểu được gọi và thực hiện như sau:self.navigationController là nil lần thứ hai ViewController được tải

UINavigationController *navController = self.navigationController; 

if (navController) { 
    [navController popToRootViewControllerAnimated:YES]; 
} else { 
    NSLog(@"navController is null/nil"); 
} 

Nếu tôi làm theo các bước sau, navController được khởi tạo một cách chính xác và hành động popToRootViewController xảy ra.

  1. Authenticate ứng dụng của tôi với webservice trên Login ViewController
  2. Auto kích hoạt một segue đến một CustomMenuViewController
  3. Chờ webservice để timeout từ xa
  4. Nhấn vào để kích hoạt một segue để CustomSubMenuViewController

Bây giờ, nếu tôi thực hiện các bước sau, mệnh đề else trong khối mã trên được kích hoạt vì một số lý do navController không được đặt chính xác:

  1. Authenticate ứng dụng của tôi với webservice trên CustomLoginViewController
  2. Auto segue đến một CustomMenuViewController
  3. Ngay lập tức bấm vào để kích hoạt một segue để CustomSubMenuViewController
  4. Bấm lại nút để kích hoạt một cửa sổ pop
  5. Chờ webservice để hết thời gian chờ từ xa
  6. Nhấp để kích hoạt một segue cho cùng một CustomSubMenuViewController

Câu hỏi của tôi là: tại sao khi tôi tải một ViewController lần thứ hai, không self.navigationController trả về null?

Cuộc gọi ngăn xếp trong ví dụ trên sẽ giống như thế này: NavigationController -> CustomLoginViewController -> CustomMenuViewController -> CustomSubMenuViewController

Cảm ơn

UPDATE: Vẫn chưa thực hiện bất kỳ sự tiến bộ về vấn đề này!

+0

Bạn đã loại trừ bất kỳ nguyên nhân nào được mô tả tại http://stackoverflow.com/a/7767160/1445366 và http://stackoverflow.com/q/1983620/1445366? –

+0

Có - tự.navigationController có thể truy cập khi viewController được nạp lần đầu tiên, nó chỉ là null khi bạn điều hướng khỏi nó và sau đó cố gắng quay trở lại nó liên tiếp. – doug

+0

Hãy chắc chắn rằng bạn không làm cho nó rỗng trong ViewDidDisappear hoặc ViewdidUnload – Navi

Trả lời

0

Tôi nghĩ rằng bạn có thể đã giải quyết vấn đề này nhưng tôi đã gặp phải điều tương tự. Và tôi nghĩ rằng chúng tôi có thể làm điều tương tự như sử dụng facebook để đăng nhập. Dù sao cho một số người khác trong tương lai điều này có thể hữu ích. Vấn đề mà tôi đã có mà tôi đã được phân bổ lại UINavigationController một lần nữa khi trở lại từ nền trên một điều kiện thất bại.

Vì vậy, những gì bạn có thể làm là cố gắng đặt một điểm ngắt xung quanh nơi bạn khởi tạo rootViewController của mình cho UiNavigationController.

[[UINavigationController alloc] 
     initWithRootViewController:viewController]; and make sure that you do re-initailise your UINavigationController if you have already done it. 
2

Điều này nghe có vẻ thực sự cơ bản nhưng, bạn đã phân bổ đối tượng Navbar một cách chính xác, Có lẽ bạn có thể thử thiết lập thuộc tính của nó là mạnh. Có thể nó sẽ bị xử lý trước thời gian.

Các vấn đề liên quan