2013-02-19 16 views
5

「[MFMailComposeViewController canSendMail]」を呼び出した後、私は奇妙なクラッシュを見ています。MFMailComposeViewControllerがクラッシュするのはなぜですか?

私はそれを再現できません、それはiTunesConnectからです。そのメソッド(canSendMail)がメインスレッドから呼び出されています。その時点で、私は何かをアドレス帳でしていません。

どのようなアイデアや提案も非常に高く評価されます。

ありがとうございます!

注:これは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:

-(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

'canSendEmail'が' NO'を返すときに 'MFMailComposeViewController'を表示しようとするかもしれません。 – jamapag

+0

'MFMailComposeViewController'を作成する場所にコードを添付できますか? – jamapag

+0

いいえ、canSendEmailがNOの場合はMFMailComposeViewControllerを表示しようとしていません。私は質問を更新します、ありがとう。 –

答えて

7

I:

このクラッシュの原因となるコードの抜粋は以下の通りです最近、iOS 5を実行している顧客からのクラッシュレポートが見られました。これは本質的にはこのレポートと重複しています。私の最高の推測は、アドレス帳のデータベースが破損しているためです。 ABAddressBookCreateへのコールでクラッシュが発生することに注意してください(これは誤解を招く名前ですが、オープンに近い)。これを引き起こすことができるはずのことは何もありません。

アドレス帳を管理していて、どこかで同期している場合は、同期をオフにして、すべての連絡先を削除してから、もう一度同期してみてください(最初にバックアップする)。

MFMailComposeViewControllerは、おそらくユーザーTo:アドレスを提供するためにアドレス帳にアクセスしています。

[NIT:あなたが機能を終了する直前に自動変数をnil'ingでない多くのポイント]

+1

書き込みの時間を取ってくれてありがとう!はい、私は同じことを考えました、それは壊れたアドレス帳のように見えます。 (いいえ、私は同期していません)。 変数を無視することについては正しいですが、他の開発者がコードを拡張する潜在的なリスクがあります。 –

4

ただ、ここでいくつかのデータを追加するには、これはあなたのコントロールを超えて何かのように見えます。ライブアプリからのクラッシュデータは、この同じクラッシュが11人のユーザーに何万人も発生していることを示しています。すべてのクラッシュはiOS 5.1と5.1.1のいくつかの味で発生したため、iOS 6で問題が解決されたように見えます。

別の回答で述べたように、[MFMailComposeViewController canSendMail]への呼び出しは@try { }ブロックに、例外をスローする場合は何も行いません。これにより、少なくともアドレス帳の破損した貧弱なユーザーがクラッシュするのを防ぐことができます。

+0

より具体的に質問することができます。 – tuxnani

+0

私はまだCrashlyticsでこれを見ていますが、実際にはクラッシュするのは誰もがiOS 5.1または5.1.1です。 – Pascal

3

これはiOS 5のバグで、iOS 6で解決されました.iOS 5デバイスでは「固定」することはできず、自分の過ちでもありません。ここで

が、私はそれを処理するために何をすべきかです...

私がやったことは私のコードの周りのtry/catchを入れており、この例外は、Iのいずれかキャッチされている場合:

A:ユーザーがiOS 6にアップグレードできないデバイス(このリストにない古いデバイス:http://ipod.about.com/od/iPhoneQandA/f/What-Devices-Are-Ios-6-Compatible.htm)を使用している場合は、アップルが原因で制御できないエラーが発生したことを示すダイアログが表示され、新しいiOSデバイスだけがこの問題を修正していることがわかりました。

OR

B:ユーザーがiOSの6アップグレードすることができ、デバイス上にある場合、ユーザーはそのバグについて知ることができますし、将来的に問題を解決するためのiOS 6にアップグレードするように指示するダイアログを開きます。

これが最良の方法で処理されることを望みます。

+0

エタンに助けてくれてありがとう。私たちは数週間でiOS 5サポートを落とそうとしています。これにより、さらに簡単になります! –

+0

こんにちは、バグとは何か情報がありますか?また、同様の問題を抱えているJorgeや他の人たちのように、私はAddressBookを自分で使っていません - この例外処理はどこにしましたか? – David

+0

@ethan、AppleからこのiOS 5バグのドキュメントや検証を探しています。私に何かを教えてもらえますか? – XJones

関連する問題