-1

出于某种原因,我遇到了崩溃(如下所述),说“Collection <__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 回答