2013-02-19 28 views
5

Tôi gặp sự cố lạ sau khi gọi "[MFMailComposeViewController canSendMail]".Tại sao MFMailComposeViewController gặp sự cố?

Tôi không thể tạo lại nó, nó từ iTunesConnect. Phương thức đó (canSendMail) đang được gọi từ chủ đề chính, và tại thời điểm đó, tôi không làm bất cứ điều gì với sổ địa chỉ.

Bất kỳ ý tưởng/đề xuất nào sẽ được đánh giá rất cao.

Cảm ơn trước!

Lưu ý: Điều này đã xảy ra trong iOS 5.1.1.

Exception Type: SIGABRT 
Exception Codes: #0 at 0x3583232c 
Crashed Thread: 0 

Thread 0 Crashed: 
0 libsystem_kernel.dylib    0x3583232c __pthread_kill + 8 
1 libsystem_c.dylib     0x347e729f abort + 95 
2 AppSupport       0x3133cc57 abortAfterFailingIntegrityCheck + 39 
3 AppSupport       0x3133ceef runIntegrityCheckAndAbort + 535 
4 AppSupport       0x3133d025 checkResultWithStatement + 113 
5 AppSupport       0x3133ea13 _connectAndCheckVersion + 1059 
6 AppSupport       0x3133eab7 CPSqliteDatabaseConnectionForWriting + 43 
7 AppSupport       0x3133eb8d CPSqliteDatabaseRegisterFunction + 21 
8 AddressBook       0x337873f7 ABCDBContextCreateWithPathAndAddressBook + 215 
9 AddressBook       0x3377b429 ABCCreateAddressBookWithDatabaseDirectoryAndForceInProcessMigrationInProcessLinkingAndResetSortKeys + 233 
10 AddressBook       0x33789cd7 ABAddressBookCreate + 15 
11 Message        0x31072453 MFThreadLocalAddressBook + 87 
12 MessageUI       0x313a5471 +[MFMailComposeController initialize] + 9 
13 libobjc.A.dylib      0x35edc973 _class_initialize + 239 
14 libobjc.A.dylib      0x35edc87b prepareForMethodLookup + 143 
15 libobjc.A.dylib      0x35edc747 lookUpMethod + 47 
16 libobjc.A.dylib      0x35edc713 _class_lookupMethodAndLoadCache3 + 19 
17 libobjc.A.dylib      0x35edbfcb objc_msgSend_uncached + 27 
18 MessageUI       0x313a5455 +[MFMailComposeViewController canSendMail] + 33 

=============

UPDATE:

Đoạn mã gây ra vụ tai nạn này là như sau:

-(IBAction)helpButtonPressed 
{ 
    if([MFMailComposeViewController canSendMail]) 
    { 
     NSString* mail = self.feedbackSettings[@"mail"]; 
     NSString* title = self.feedbackSettings[@"title"]; 

     MFMailComposeViewController* mailComposer = [[MFMailComposeViewController alloc] init]; 
     mailComposer.mailComposeDelegate = self; 
     mailComposer.toRecipients = @[ mail ]; 
     mailComposer.subject = title; 

     [self presentViewController:mailComposer animated:YES completion:nil]; 
     [mailComposer release], mailComposer = nil; 
    } 
    else 
    { 
     [UIAlertView showAlertViewWithTitle:nil message:NSLocalizedString(@"Please, setup a mail account in your phone first.", nil) buttonTitle:NSLocalizedString(@"OK", nil)]; 
    } 
} 
+0

Có thể bạn đang cố trình bày 'MFMailComposeViewController' khi' canSendEmail' trả về 'NO'. – jamapag

+0

Bạn có thể đính kèm đoạn mã nơi bạn tạo 'MFMailComposeViewController' không? – jamapag

+0

Không, tôi không cố gắng trình bày MFMailComposeViewController khi canSendEmail là KHÔNG. Tôi sẽ cập nhật câu hỏi, cảm ơn. –

Trả lời

7

tôi gần đây đã thấy một báo cáo sự cố từ một khách hàng đang chạy iOS 5 về bản chất là bản sao của bản sao này. Đoán tốt nhất của tôi là nó được gây ra bởi một cơ sở dữ liệu sổ địa chỉ bị hỏng. Lưu ý rằng sự cố xảy ra trong một cuộc gọi đến ABAddressBookCreate (đó là một tên gây hiểu nhầm; nó giống như mở); không có gì bạn đang làm mà có thể gây ra điều này.

Nếu bạn có quyền kiểm soát sổ địa chỉ và đang đồng bộ hóa ở đâu đó, bạn có thể thử tắt đồng bộ hóa, xóa tất cả địa chỉ liên hệ và sau đó đồng bộ hóa lại (sao lưu trước).

MFMailComposeViewController đang truy cập sổ địa chỉ, có lẽ, để cung cấp cho người dùng đến: địa chỉ.

[Nit:. Không nhiều điểm trong nil'ing một biến tự động ngay trước khi bạn thoát khỏi một chức năng]

+1

Cảm ơn bạn đã dành thời gian viết bài !. Có, tôi nghĩ cùng một điều, nó trông giống như một sổ địa chỉ tham nhũng. (Không, tôi không đồng bộ hóa). Về các biến số không đúng, bạn nói đúng, nhưng luôn có một rủi ro tiềm ẩn mà một số nhà phát triển khác sẽ mở rộng mã của bạn và khả năng phát hành * khả năng * bỏ lỡ !. –

4

Chỉ cần thêm một số dữ liệu ở đây, điều này có vẻ như cái gì đó là ngoài tầm kiểm soát của bạn. Dữ liệu sự cố từ một ứng dụng trực tiếp cho thấy sự cố tương tự này xảy ra với 11 người dùng trong hàng chục nghìn người dùng. Tất cả các sự cố xảy ra ở một số hương vị của iOS 5.1 và 5.1.1, vì vậy có vẻ như sự cố đã được giải quyết trong iOS 6.

Như đã đề cập trong câu trả lời khác, bạn có thể kết thúc cuộc gọi đến [MFMailComposeViewController canSendMail] trong khối @try { }, và không làm gì trong trường hợp nó ném một ngoại lệ. Điều này sẽ ít nhất là ngăn chặn những người dùng nghèo với sổ địa chỉ bị hỏng từ bị rơi.

+0

Có thể cụ thể hơn cho câu hỏi được hỏi. – tuxnani

+0

Tôi cũng vẫn thấy điều này trong Crashlytics, và thực sự, tất cả mọi người mà tai nạn là trên iOS 5.1 hoặc 5.1.1 vẫn còn. – Pascal

3

Đây là lỗi trong iOS 5 đã được giải quyết trong iOS 6. Nó không thể được "cố định" trên thiết bị iOS 5 và không phải là lỗi của bạn.

Dưới đây là những gì tôi làm gì để xử lý nó ...

Những gì tôi đã làm là đặt một try/catch xung quanh mã của tôi, và nếu ngoại lệ này được bắt gặp, tôi hoặc là:

A: Nếu người dùng trên thiết bị KHÔNG THỂ nâng cấp lên iOS 6 (thiết bị cũ hơn và KHÔNG trong danh sách này: http://ipod.about.com/od/iPhoneQandA/f/What-Devices-Are-Ios-6-Compatible.htm), hãy bật hộp thoại một cách duyên dáng cho biết rằng chúng tôi đã gặp phải lỗi do Apple gây ra mà chúng tôi không thể kiểm soát hoặc khắc phục, và chỉ có một thiết bị iOS mới hơn khắc phục được sự cố này.

HOẶC

B: Nếu người dùng là trên một thiết bị có thể được nâng cấp iOS 6, bật một hộp thoại cho phép người dùng biết về lỗi đó và chỉ thị cho họ để nâng cấp lên iOS 6 để sửa chữa các vấn đề trong tương lai .

Hy vọng rằng xử lý điều này một cách tốt nhất.

+0

Cảm ơn sự giúp đỡ của bạn Ethan. Chúng tôi sắp ngừng hỗ trợ iOS 5 trong một vài tuần, điều này giúp mọi việc trở nên dễ dàng hơn!. –

+0

Xin chào, bạn có thông tin gì về lỗi này không? Ngoài ra, như Jorge và những người khác có vấn đề tương tự tôi không sử dụng AddressBook bản thân mình - nơi bạn đã đặt xử lý ngoại lệ này? – David

+0

@ethan, Tôi đang cố tìm bất kỳ tài liệu hoặc xác minh lỗi iOS 5 nào từ Apple. Bạn có thể chỉ cho tôi bất cứ điều gì? – XJones

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