0

アプリ ユーザーのサブセットがクラッシュを報告しています。彼らのクラッシュ ログの 1 つをシンボル化したところ、問題のあるコードが読み取られたラベルであることがわかりました。

クラッシュ ログからの出力は次のとおりです。

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000
Crashed Thread:  0
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   CoreFoundation                  0x33e5004e 0x33e4d000 + 12366
1   CoreFoundation                  0x33e58cfc 0x33e4d000 + 48380
2   Mail my meeting                 0x00002a9c -[Mail_my_meetingAppDelegate initPeople] Mail_my_meetingAppDelegate.m:136)
3   Mail my meeting                 0x0000287a -[Mail_my_meetingAppDelegate application:didFinishLaunchingWithOptions:] (Mail_my_meetingAppDelegate.m:74)

そして、これがコードで、136 行目が最後の行です。

NSString* finalName=[NSString stringWithFormat:@"%@%@%@",firstName,middleName,lastName];
NSString *phoneNumber = nil;
ABMultiValueRef phoneNumbers1 = ABRecordCopyValue(person,kABPersonPhoneProperty);
if (ABMultiValueGetCount(phoneNumbers1) > 0) {
    CFIndex j;
    for (j=0; j < ABMultiValueGetCount(phoneNumbers1); j++) {
        CFStringRef label = ABMultiValueCopyLabelAtIndex(phoneNumbers1, j);

この最後の行がどのようにクラッシュを引き起こすのか理解できません。なぜなら、それがカウント未満であり、ゼロから始まることを検証したからです。

これは私を少し夢中にさせているので、どんなアイデアでも大歓迎です!

4

2 に答える 2

0

それは壊れた名簿かもしれません、私は時々それを見ました。

ただし、ほとんどの場合、異なるキューまたはスレッドでABデータベースにアクセスすることが原因です。

于 2012-08-16T07:48:02.187 に答える
0

同様の問題がありました。

クラッシュ メソッドを呼び出しているのは誰ですか?

呼び出しているメソッドとクラッシュしたメソッドが同じスレッド/キューで実行されているかどうかを確認します。または、少なくともすべての AB 関連のメソッドが同じキュー/スレッドで実行されます。

はいの場合は、すべての AB 変数の最初のインスタンスを作成するときに、それらが同じスレッドまたはキューで作成されることを確認してください。

基本的に、常に同じキューまたはスレッドで AB 関数にアクセスする必要があります。

于 2012-06-07T10:27:12.603 に答える