-1

何らかの理由で、「列挙中にコレクション <__NSCFString: 0x155cefd0> が変更されました」というクラッシュが発生しますが (下記参照)、実際のデバイスでのみ発生します。Xcode テスト デバイスで動作します。それが何を意味するのか完全にはわかりませんが、この lldb クラッシュにどのようにアプローチすればよいでしょうか?

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, nil);
        ABRecordRef pet = ABPersonCreate();
        ABRecordSetValue(pet, kABPersonFirstNameProperty, (__bridge CFStringRef)petFirstName, nil);
        ABRecordSetValue(pet, kABPersonLastNameProperty, (__bridge CFStringRef)petLastName, nil);

        ABMutableMultiValueRef phoneNumbers = ABMultiValueCreateMutable(kABMultiStringPropertyType);
        ABMultiValueAddValueAndLabel(phoneNumbers, (__bridge CFStringRef)petPhoneNumber, kABPersonPhoneMainLabel, NULL);
        ABRecordSetValue(pet, kABPersonPhoneProperty, phoneNumbers, nil);

        ABAddressBookAddRecord(addressBookRef, pet, nil);

        NSArray *allContacts = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBookRef);
        for (id record in allContacts){
            ABRecordRef thisContact = (__bridge ABRecordRef)record; //*******The line below is where the crash is occurring*********   
            if (CFStringCompare(ABRecordCopyCompositeName(thisContact),
                                ABRecordCopyCompositeName(pet), 0) == kCFCompareEqualTo){
                //The contact already exists!
                //detects if duplicate

                return;
            }
        }
4

1 に答える 1

0

アプリケーションの別の時点でコレクションを変更しています。Apple docs によると、「列挙中に変更可能なコレクションの要素を削除、置換、または追加することは安全ではありません」
次を確認してください。

  1. 上記のコードの実行中に変更できる、アプリで使用しているコレクション。
  2. 反復処理中にコレクションを変更する必要がある場合は、リンクされたドキュメントで提案されている手法を使用してください。
于 2014-05-15T18:26:36.103 に答える