2013-10-22 3 views
1

이 작은 보석은 디버깅에 2 시간의 비용이 들었으므로 여기에 문제 (및 솔루션)를 게시 할 것이라고 생각했습니다. 연락처 데이터를 추출하기 위해 나중에 사용하는 주소록 상수 배열 (kABPerson*Property)을 만듭니다. 놀랍게도, 값은 모두 0으로 보입니다. 마치 iOS 7에서 어쨌든 상수처럼 보일지라도 이들을 뒷받침하는 것이 실제로 전역 변수 인 것처럼 보이지만 메모리 덮어 쓰기 문제는 추적 할 수 없었습니다. 도대체 무슨 일이 벌어 질 수 있니?kabPerson * 속성 "상수"가 초기화되지 않았습니다.

답변

0

"상수"가 ABAddressBookCreate의 첫 번째 호출에서 실제로 초기화되는 것으로 나타났습니다. 그 전에 값은 모두 0입니다. 당신이 주소록 이전에 액세스하지 않은 경우

NSLog(@"Before AddressBook Create, kABPersonLastNameProperty = %d", kABPersonLastNameProperty); 
    ABAddressBookRef store = ABAddressBookCreateWithOptions(NULL, NULL); 
    NSLog(@"After AddressBook Create, kABPersonLastNameProperty = %d", kABPersonLastNameProperty); 

, 당신은 출력과 같이 볼 것입니다 : 여기에 몇 가지 예제 코드입니다 I 다른 통화뿐만 아니라 만에서 정수를 초기화 할 수 있습니다

Before AddressBook Create, kABPersonLastNameProperty = 0 
    After AddressBook Create, kABPersonLastNameProperty = 1 

내 탐사는 ABAddressBookGetAuthorizationStatus으로 이 아니고이 충분합니다.

+0

아직도 그렇습니까? 나는'appdidfinishlaunching'의 첫 줄에 중단 점을 사용했고'po kABPersonPhoneMobileLabel'은 올바른 것을 반환합니다. – bogardon

+0

iOS 8 Simulator에서 여전히 동일한 동작이 나타나는 것 같습니다. 샘플 라인을 복사하여 'didFinishLaunching' 맨 위에 붙여 넣었습니다. 다른 결과를 얻으면 알려주세요! – Ethan