2010-07-06 7 views
-1

문제는 언제든지 phones 변수에서 호출 된 모든 메서드에서 런타임 충돌이 발생한다는 것입니다. 이 버전에서는 1 (ABMultiValueCopyValueAtIndex)에 오류가 표시됩니다. 이 줄에 주석을 달려면 2 (ABMultiValueGetCount)으로 코드가 충돌합니다. 속성이 비어있는 것 같습니다. 내가 NSLog 인 경우 phones 변수입니다. 나는 (null)이됩니다. iPhone Simulator에서 코드를 테스트 할 때 일부 전화 번호가있는 더미 연락처가 있습니다. 또한 firstNamelastName은 매력처럼 작동합니다.iPhone의 주소록에서 여러 속성을 처리하는 방법은 무엇입니까?

+1

그래서 null을 처리하는 방법에 대한 질문은 무엇입니까? – slf

+0

제 질문은 주소록에서 번호를 얻는 방법입니다. 숫자는 거기에 있지만 어떻게 든 null이됩니다. – Alistra

답변

0

코드 :

addressBook = ABAddressBookCreate(); 
people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 
CFRelease(addressBook); 

는 주소록과 너무 출시 된에서 reffered 된 모든 개체를 해제. 그래서 MultiValueRefs에 대한 포인터는 사용 전에 할당 해제되었습니다.

-4

for(id person in people){ 
    NSString *firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
    NSString *lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 
    ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty); 
    NSString *phone = (NSString*)ABMultiValueCopyValueAtIndex(phones, 0); /*1*/ 
/*2/ id ph, phLb; 
    for (CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) { 
     phLb = ABMultiValueCopyLabelAtIndex(phones, i); 
     ph = ABMultiValueCopyValueAtIndex(phones, i); 
     NSLog(@"%@,%@", phLb, ph); 
     CFRelease(phLb); 
     CFRelease(ph); 
    } 
*/ 
NSLog(@"%@", firstName); 
NSLog(@"%@", lastName); 
NSLog(@"%@", phones); 
NSLog(@"%@", phone); 

[firstName release]; 
[lastName release]; 
[phone release]; 
[phones release]; 

}는 디버거를 사용하는 방법에 대해 알아보세요. 또한 코드가 유출됩니다.

+0

누수가 있다는 것을 알고 있습니다. 먼저 작동 시키려면 모든 변수를 유지해야합니다. – Alistra

+0

주소록에 대해 잘 모르는 경우 tc 질문에 대답하지 마십시오. 감사! –

0

저는 ABMultiValueRef를 조달하는 방법에 대한 귀하의 가정을 잘못 생각합니다. 이 컴퓨터에는 내 AB 코드가 없지만 ABRecordCopyValue가 적절한 방법인지 확인하십시오. 그런 다음 ABMultiValueRef에 대한 내용을 액세스하는 방법에 대해 조사하십시오. 그것은 단순한 문자열보다 완전히 다른 객체 세트입니다.

+0

댓글을 달았습니다. id 유형으로 시도 했는데도 작동하지 않았습니다. 나는이 예제가 apple 문서에서 거의 복사 - 붙여 넣어 진 것, 그것이 multiRef 부분을 사용하는 방법이라고 생각한다. 나는 일하러 나간다. – Alistra

관련 문제