2013-06-23 4 views
1

Я анализирую отчеты о сбоях моего приложения. Кажется, у меня проблема с CFArrayAppendValue.Сбой CFArrayAppendValue: EXC_BREAKPOINT (SIGTRAP)

Exception Type: EXC_BREAKPOINT (SIGTRAP) 
Exception Codes: 0x0000000000000001, 0x000000000000defe 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 CoreFoundation     0x330f8268 __CFTypeCollectionRetain 
1 CoreFoundation     0x330619ca _CFArrayReplaceValues 
2 CoreFoundation     0x330618ba CFArrayAppendValue 

Я пытаюсь понять, как пользователь может вызвать этот крах, но это не очевидно для меня. Используемый код довольно прост:

CFMutableArrayRef CFgroupMemberMutable = CFArrayCreateMutable (NULL,0,&kCFTypeArrayCallBacks); 
for (id key in [dataManager getSpecificGroupMembers:groupID]){ 
    ABRecordRef thisContact = ABAddressBookGetPersonWithRecordID (myAddressBook, [key intValue]); 
    CFArrayAppendValue (CFgroupMemberMutable,thisContact); 
} 

Это потому, что я пытаюсь добавить значение NULL? (ABRecordRef не существует?) Используется ли метод обратного вызова неправильно?

Спасибо за вашу помощь, John John

ответ

0

Да, если вы пытаетесь добавить значение NULL, используя CFArrayAppendValue(), исключение будет брошено, и вы получите EXC_BREAKPOINT. Обратный вызов по умолчанию, используемый в вашем примере, выглядит правильно.

ABAddressBookGetPersonWithRecordID() может возвращать NULL, если запись в адресной книге не найден, так что вы должны проверить NULL, здесь обновленный код:

CFMutableArrayRef CFgroupMemberMutable = CFArrayCreateMutable (NULL,0,&kCFTypeArrayCallBacks); 
for (id key in [dataManager getSpecificGroupMembers:groupID]){ 
    ABRecordRef thisContact = ABAddressBookGetPersonWithRecordID (myAddressBook, [key intValue]); 
    if (thisContact) 
    { 
     CFArrayAppendValue (CFgroupMemberMutable,thisContact); 
    } 
} 
Смежные вопросы