2013-06-23 3 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가 존재하지 않습니까?) 콜백 메소드가 잘못 사용 되었습니까? 당신의 도움에 대한

감사합니다, 존 존

답변

0

당신이 CFArrayAppendValue를 사용하여 NULL 값()를 추가하려고하면 예, 예외가 던져 질 것이다 당신이 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); 
    } 
} 
관련 문제