2011-12-15 17 views
10

Dưới đây là cách tôi thể hiện UIAlertView và clickedButtonAtIndex đại biểu -ARC và UIAlertView: chọn không được công nhận gửi đến dụ

UIAlertView *alert = 
    [[UIAlertView alloc] initWithTitle: @"title" 
           message: @"message" 
           delegate: self 
        cancelButtonTitle: @"Cancel" 
        otherButtonTitles: @"Continue", nil]; 

    [alert show]; 


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    //something 
} 

Đoạn mã này hoạt động hoàn hảo mà không ARC. Nhưng với ARC nó throws lỗi này - Chấm dứt ứng dụng do ngoại lệ còn tự do 'NSInvalidArgumentException', lý do: '- [__ NSCFType alertView: clickedButtonAtIndex:]: chọn không được công nhận gửi đến dụ 0x859d790'

Bất kỳ ý tưởng về lý do tại sao các đại biểu là ném lỗi này?

+1

Bản thân đại biểu đang được deallocated. Bạn tạo và quản lý đối tượng đó như thế nào? –

+1

@ FirozeLafeer - đối tượng đang gọi đoạn mã này, tức là bản thân đã được ARC phát hành. Tôi đã biến nó trở thành tài sản và bây giờ nó có vẻ hoạt động. Cảm ơn :) – arank

Trả lời

13

Đại biểu của bạn đã được dealloc'd. Kiểm tra kỹ mã của bạn để đảm bảo đối tượng đang hiển thị cảnh báo và thiết lập chính nó khi đại biểu được giữ lại bằng cách nào đó (ví dụ: một cái gì đó trong ứng dụng của bạn có tham chiếu mạnh mẽ với nó).

+0

điều này thực sự là vấn đề của tôi, mà sau khi bài đăng này tôi nhận ra là bởi vì tôi đã sao chép một nút trên trong bảng phân cảnh mà vẫn có một phương pháp kèm theo dealloc'd viewController. Do đó phương pháp khác của tôi, mà WAS nhận được gọi và thực hiện đúng, không thể thực hiện các nhiệm vụ trong theclickedButtonAtIndex. Hy vọng điều này sẽ giúp một ai đó, nhờ giải pháp của bạn! –

+0

Ngoài ra, tìm kiếm CocoaPods cho UIAlertView và bạn sẽ tìm thấy một số bổ sung dựa trên khối sẽ đơn giản hóa bằng cách sử dụng UIAlertView và loại bỏ sự cần thiết phải sử dụng UIAlertViewDelegate trong bộ điều khiển xem của bạn. –

0

tương tự cũng có thể xảy ra nếu bạn quên nil ở cuối sau khi thông số cuối cùng otherButtonTitles:

delegate: self cancelButtonTitle: @"No" otherButtonTitles: @"Yes",nil]; // don't forget the nil at the end here! (or it will crash first run)

Điều thú vị là đủ nó bị treo chỉ là lần đầu tiên bạn chạy ứng dụng. Sau đó, nó chạy tốt.

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