2012-09-17 34 views
43

Tôi đang cố gắng tìm ra lý do tại sao tôi nhận được sự cố này trong ứng dụng của mình.Mã EXC_BAD_ACCESS 2 trên UIAlertView trong iOS6

Nó hoạt động hoàn toàn tốt đẹp trong Xcode 4.4 chạy trong mô phỏng với iOS5.1, nhưng khi tôi chuyển sang xcode 4.5 và iOS6 tôi nhận được một mã số EXC_BAD_ACCESS 2. Đây là mã của tôi:

- (void) myMethod 
{ 
    UIAlertView *alertview = [[[UIAlertView alloc]initWithTitle:@"Title" message:@"message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease]; 
    alertview.tag = 1 
    [alertview show]; 
} 

điều này đang cho tôi mã EXC_BAD_ACCESS 2 trên [UIAlertView show] dòng

bất kỳ ý tưởng nào?

cảm ơn!

Trả lời

126

Tôi đã hiểu. Tôi có cùng một vấn đề, trong trường hợp của tôi có vẻ như là phương pháp được ném từ nền bây giờ (bây giờ trong ios7, trong ios6 UIAlertView được tự động đưa vào chủ đề chính như @nodepond nói -thanks! -) ..

cố gắng đảm bảo rằng phương pháp được hiển thị từ chủ đề chính:

[alertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES]; 

Chúc may mắn!

+4

đẹp kỹ năng gỡ lỗi! Chắc chắn làm việc –

+3

Tôi chỉ muốn thêm vào đó vụ tai nạn này cũng xảy ra khi ứng dụng được khởi chạy, nếu người dùng về nhà và quay lại, một màn hình hiển thị cảnh báo sẽ dẫn đến lỗi. Làm performSelectorOnMainThread ... sẽ sửa chữa nó theo gợi ý của Eva. – Tommy

+0

Tuyệt vời! Điều này đã giúp tôi và giải quyết vấn đề của tôi! – Patrik

0

Điều đó xảy ra với tôi, ngay cả trong năm 2014. Vấn đề là muốn sử dụng một đối tượng đã được phát hành.

Những gì tôi đã làm sai:

//class B with UIAletViewDelegate 

-(void) showAlert{ 
UIAlertView * alert = [[UIAlertView alloc] initWithTitle bla bla...]; 
[alert show]; 
} 


//class A 
viewDidLoad{ 
MyClassB *B = [[B alloc] init]; 
[B showAlert]; 
} 

đúng cách là gì:

//Class A 
@implementation A{ 
    ClassB *B; 
} 

viewDidLoad{ 
    B = [[B alloc] init]; 
    [B showAlert]; 
} 
Các vấn đề liên quan