2015-04-09 27 views
10

thời gian gần đây tôi bắt đầu nhận được báo cáo sự cố cho UIAlertView chỉ bởi người dùng sử dụng iOS 8.3crashs UIAlertView trong iOS 8.3

Crashlytics báo cáo:

Fatal Exception: định hướng UIApplicationInvalidInterfaceOrientation được hỗ trợ không có định hướng chung với các ứng dụng và [_UIAlertShimPresentingViewController shouldAutorotate] đang trả lại CÓ

Dòng xảy ra sự cố đó là [alertXem hiển thị]:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title 
                message:message 
                delegate:nil 
              cancelButtonTitle:cancelButtonTitle 
              otherButtonTitles:nil]; 
[alertView show]; 

mã đó nằm trong ứng dụng trong một thời gian dài và giờ nó bắt đầu bị lỗi. Có ai có hành vi tương tự và đã khắc phục được sự cố không?

+1

nó bị phản đối trong iOS 8. –

+2

tôi biết - nhưng mọi thứ bị phản đối vẫn phải làm việc và nó làm việc tốt trong ios 8.0, 8.1 và 8.2. Kể từ khi ứng dụng của tôi cũng hỗ trợ iOS 7 và tôi không muốn giới thiệu điều kiện cho các cuộc gọi UIAlertView tôi quyết định vẫn giữ mã cũ miễn là nó được hỗ trợ –

+0

Tôi nhận được cùng một lỗi với UIAlertControllers. Subclassing UIAlertController (hoặc UIAlertView) nên khắc phục vấn đề. – Maxwell

Trả lời

9

thử bằng cách thực hiện kiểm tra

- (BOOL)shouldAutorotate { 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

này này cũng: Orientation issue in Lanscape mode while opening camera in iOS 7 in iPhone

+0

Tôi nghĩ rằng tôi đã có điều này trong, nhưng tôi tai nạn sử dụng UIDeviceOrientationPortrait thay vì UIInterfaceOrientationMaskPortrait. –

+0

như vậy là nó giải quyết vấn đề của bạn phải không? – Bhoomi

+0

Đã thêm phương pháp ở trên nhưng vẫn gặp sự cố với ứng dụng của tôi – Abhishek

1

Tốt hơn so với điều này, bạn nên bắt đầu sử dụng UIAlertController. Nó có chức năng tốt hơn nhiều và cũng cho UIAlertAction bạn không phải bao gồm các phương thức đại biểu.

UIAlertController * alert= [UIAlertController 
          alertControllerWithTitle:@"Info" 
          message:@"You are using UIAlertController" 
          preferredStyle:UIAlertControllerStyleAlert]; 

UIAlertAction* ok = [UIAlertAction 
        actionWithTitle:@"OK" 
        style:UIAlertActionStyleDefault 
        handler:^(UIAlertAction * action) 
        { 
         [alert dismissViewControllerAnimated:YES completion:nil]; 

        }]; 

UIAlertAction* cancel = [UIAlertAction 
         actionWithTitle:@"Cancel" 
         style:UIAlertActionStyleDefault 
         handler:^(UIAlertAction * action) 
         { 
          [alert dismissViewControllerAnimated:YES completion:nil]; 

         }]; 

[alert addAction:ok]; 

[alert addAction:cancel]; 

[self presentViewController:alert animated:YES completion:nil]; 
9

Điều quan trọng là:

UIApplicationInvalidInterfaceOrientation hỗ trợ định hướng không có định hướng chung với các ứng dụng

Nó có nghĩa là bạn đã ở đâu đó thực hiện

- (NSUInteger)supportedInterfaceOrientations { 

    return UIDeviceOrientationPortrait; // or UIInterfaceOrientationPortrait 
} 

UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait =

Trong chức năng phải được trả lại Mask như:

UIInterfaceOrientation Mask Portrait là

0

Sau khi thử các giải pháp ở đây, không có giải pháp nào phù hợp với tôi.Tôi đang hỗ trợ iOS 6-8 trong một ứng dụng, và hơn thế nữa, hãy sử dụng một số thư viện sử dụng UIAlertView bên trong, vì vậy chỉ cần biên dịch có điều kiện để sử dụng UIAlertController khi có sẵn không phải là một tùy chọn.

Tôi đã đưa ra giải pháp giải quyết vấn đề cho tôi. Số dặm của bạn có thể thay đổi. Tôi bao gồm các tập tin tiêu đề trong tập tin Header Tiền tố để nó chắc chắn sẽ được bao gồm bất cứ nơi nào một UIAlertView được hiển thị.

Tôi đăng bài đăng này tại đây cho bất kỳ ai đang lo ngại về vấn đề này và các giải pháp được tìm thấy trên mạng không hoạt động. Hy vọng nó hữu ích.

https://gist.github.com/joshhudnall/cdc89b61d0a545c85d1d

0

Tôi tạo ra một helper để hiển thị UIAlertView khi trước iOS8 và UIAlertController sau iOS8, điều này giải quyết các vụ tai nạn luân chuyển và cũng hiển thị độc đáo trong tất cả các phiên bản.

https://github.com/dannyshmueli/DSAlertDisplayer

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