2015-09-27 18 views
8

Tôi đang cố gắng thêm một UIAlertController vào ứng dụng của mình nhưng nó hoàn toàn không xuất hiện. Tôi đã thử các cách sau:UIAlertController không xuất hiện ở tất cả

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Message" message:@"Web Service is not available." preferredStyle:UIAlertControllerStyleAlert]; 

UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; 
[alertController addAction:ok]; 

[self presentViewController:alertController animated:YES completion:nil]; 

nhưng điều này không hề xuất hiện, tôi đang làm gì sai?

+0

Mã này sẽ hoạt động tốt. Bạn có thể cho chúng tôi thấy phần còn lại của bối cảnh trong đó đoạn trích này xuất hiện không? – JaredH

+0

Mã bạn đã đăng có vẻ như nó sẽ hoạt động. Phương pháp của bạn trông như thế nào mà bạn đang sử dụng để hiển thị cảnh báo đó? Phương pháp đó có được gọi không? – Adrian

+0

Bạn đang cố gắng trình bày bộ điều khiển cảnh báo này khỏi chủ đề chính? Bạn thậm chí còn trình bày nó từ một bộ điều khiển xem? bạn đang nhận được bất kỳ lỗi nào? – JAL

Trả lời

19

Trong bộ điều khiển chế độ xem ban đầu của bảng phân cảnh, điều này phải ở trong viewDidAppear:. Nếu không, nếu được sử dụng trong XIB, nó cũng sẽ hiển thị cảnh báo trong viewWillAppearviewDidLoad.

tôi chạy mã của bạn trong mẫu đơn Xem ứng dụng trong cả hai iOS 8 và 9, đặt mã của bạn vào ViewController, đưa ra trong callbacks chu kỳ xem cuộc sống sau:

  • viewDidAppear - thành công
  • viewWillAppear - không có cảnh báo nào được hiển thị; dẫn đến kết quả đầu ra này trong bảng điều khiển: Cảnh báo: Cố gắng hiển thị trên chế độ xem không có trong cấu trúc phân cấp cửa sổ!
  • viewDidLoad - không hiển thị thông báo; dẫn đến kết quả đầu ra này trong bảng điều khiển: Cố gắng tải chế độ xem của trình điều khiển chế độ xem trong khi nó được deallocating không được phép và có thể dẫn đến hành vi không xác định().
+0

Tại sao bạn muốn trình bày một bộ điều khiển cảnh báo trong viewDidLoad? Điều gì sẽ xảy ra nếu bạn đang tải lên chế độ xem nhưng không hiển thị thường xuyên? – JAL

+0

Để trả lời câu hỏi đầu tiên của bạn, bạn có thể muốn hiển thị cảnh báo ngay sau khi chế độ xem xuất hiện. Tuy nhiên, tôi chỉ đơn giản đề cập đến điều đó, trong trường hợp mã của Magna nằm trong 'viewDidLoad'. Tôi chỉ thử đặt mã của anh ta bên trong phương thức 'viewDidLoad' trong iOS 9 với Storyboard (mẫu Single View Application) và tôi gặp lỗi: Cố gắng tải chế độ xem của trình điều khiển chế độ xem trong khi nó được deallocating không được phép và có thể dẫn đến hành vi không xác định (). Tôi sẽ mở rộng câu trả lời của tôi với một số lời giải thích. – Sheamus

+0

viewDidLoad không được gọi ngay khi khung nhìn xuất hiện. Đó sẽ là viewWillAppear. Và có, nó sẽ không có ý nghĩa để trình bày một bộ điều khiển xem trên một khung nhìn trong khi nó đang tải. – JAL

0
- (void)showMessage:(BOOL)animated { 

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Do not leave any Field Empty" message:nil preferredStyle:UIAlertControllerStyleAlert]; 

[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
}]]; 
[self present:alertController animated:YES completion:nil]; 

}

nơi mà tôi gọi phương pháp này

 [self showMessage:YES]; 

nó hoạt động tốt có thể một số một có được lợi ích.

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