2010-10-08 37 views
9

Tôi làm việc trong ứng dụng iPhone, tôi đang chọn hình ảnh từ thư viện ảnh bằng cách sử dụng điều khiển bộ chọn UII, sau đó xử lý và hiển thị hình ảnh và đầu ra tương ứng bằng cách sử dụng UIImageview và UITextview tương ứng. Đối với một số hình ảnh nó làm việc tốt và cho một số chương trình hình ảnh bị rơi và trong khi kiểm tra này với điểm break tôi nhận được tin nhắn như CHƯƠNG TRÌNH NHẬN ĐƯỢC SIGABRT. bất cứ ai có thể đề nghị tôi làm thế nào để xử lý lỗi này. Lưu ý: Đối với mỗi hình ảnh tôi nhận được đầu ra, tôi đã kiểm tra nó với điểm ngắt. mẫu mã của tôi là ở đây,Tín hiệu nhận được chương trình SIGABRT

Để hiển thị hình ảnh:

CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 240.0f); 
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect]; 
[myImage setImage:img]; 
myImage.opaque = YES; // explicitly opaque for performance 
[self.view addSubview:myImage]; 
[myImage release]; 

Để hiển thị văn bản:

CGRect frame = CGRectMake(0.0f, 250.0f, 320.0f,25.0f); 
UITextView * tmpTextView = [[UITextView alloc]initWithFrame:frame]; 
tmpTextView.text = [NSString stringWithFormat:@"%@%@",@"value: ", somevalue]; 
[self.view addSubview:tmpTextView]; 
[tmpTextView release]; 
+1

Bạn có thể chỉnh sửa bài đăng của mình để có mã có tô sáng cú pháp không? – mathk

Trả lời

15

SIGABRT được nuôi dưỡng bởi các abort(3) chức năng. Nó không thể nói chính xác những gì đang xảy ra trong chương trình của bạn mà không cần biết thêm thông tin, nhưng những lý do phổ biến nhất mà abort() được gọi là:

  • Bạn đang gửi một thông điệp tới một đối tượng Objective-C mà không hỗ trợ/triển khai thông điệp đó. Điều này dẫn đến lỗi "unrecognized selector sent to instance" đáng sợ.
  • Bạn có xác nhận không thành công ở đâu đó. Trong các bản dựng không gỡ lỗi xác định macro NDEBUG, macro thư viện chuẩn assert(3) gọi abort() khi xác nhận không thành công
  • Bạn có lỗi stomping/phân bổ bộ nhớ. Khi malloc/free phát hiện một đống lỗi, có thể gọi abort() (xem, ví dụ như this question)
  • Bạn đang ném một ngoại lệ còn tự do (hoặc C++ ngoại lệ hoặc một ngoại lệ Objective-C)

Trong hầu hết các các trường hợp, bảng điều khiển gỡ lỗi sẽ cung cấp cho bạn thêm một chút thông tin về những gì gây ra abort() để được gọi, vì vậy hãy luôn xem xét ở đó.

+0

Cảm ơn bạn đã trả lời. Tôi đã khắc phục vấn đề đó. – Ashok

+7

@ashok: sẽ rất hữu ích nếu bạn cho chúng tôi biết cách bạn giải quyết lỗi đó. –

+1

Một cách hay để tìm lỗi một phần trong cơ sở mã của riêng bạn, là bật một điểm ngắt ngoại lệ (hoặc đảm bảo rằng bạn không có điểm ngắt được tắt :)). Điều này sẽ cho bạn thấy ví dụ chính xác mà một trong những khẳng định của bạn đang tạo ra vấn đề. –

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