2011-11-16 27 views
9

Đây là mã của tôi:UIAlertView hiển thị từ sợi nền và không có đại biểu tạo EXC_BAD_ACCESS

#ifdef DEBUG 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"ERROR" message:@"JSON Parsing Error" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alertView show]; 
    [alertView release]; 
#endif 

Mã này được thực hiện trong một thread nền (chịu trách nhiệm phân tích), và lỗi chỉ xảy ra mỗi khi khác. Bất kỳ ý tưởng về vấn đề ở đây là gì?

Trả lời

17

Không gây rối với giao diện người dùng từ chuỗi nền. Tạo phương thức và gọi phương thức đó trên chủ đề chính:

[someObject performSelectorOnMainThread:@selector(showDebug:) 
          withObject:@"JSON Parsing Error" 
          waitUntilDone:YES]; 
+0

câu trả lời hoàn hảo như tôi có vấn đề trong iOS 6.0 mà đã được giải quyết –

2

Bạn không nên thực thi mã giao diện người dùng trong chuỗi riêng biệt.

Nếu ứng dụng của bạn có một giao diện người dùng đồ họa, nó được khuyến khích mà bạn nhận được sự kiện người dùng liên quan đến và bắt đầu cập nhật giao diện từ chủ đề chính của ứng dụng của bạn. Cách tiếp cận này giúp tránh các sự cố đồng bộ hóa được liên kết với việc xử lý các sự kiện của người dùng và nội dung cửa sổ bản vẽ. Một số khung, chẳng hạn như Cocoa, nói chung là yêu cầu hành vi này, nhưng ngay cả đối với hành vi không, giữ hành vi trên chủ đề chính này có lợi thế là đơn giản hóa logic để quản lý giao diện người dùng của bạn.

Threads and Your User Interface

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