ABPeoplePickerNavigationController가 Exchange와 iCloud에서 동기화 된 전화 번호가있는 연락처에 대해 잘못된 식별자를 반환하는 것으로 보이는 문제가 있습니다. 내 응용 프로그램은 iOS 7.1에서 실행되며 iOS 7.1 SDK로 컴파일됩니다.Exchange 및 iCloud 전화 번호가 동일한 항목에있을 때 ABPeoplePicker 대리자가 잘못된 식별자를 반환합니다.
TL - 사람들 선택 대리인 콜백에서 Exchange와 iCloud에서 병합 된 전화 번호가있는 연락처가있을 때 잘못된 식별자가 나타납니다.
선제 답변 : 예 저는 ABMultiValueGetIndexForIdentifier를 호출하려고합니다.
이 문제는 Exchange 및 iCloud에서 전화 번호가 하나만있는 경우에만 발생합니다. iOS 6.1 SDK로 컴파일 된 이전 버전의 응용 프로그램을 실행했는데 iOS 7.1에서 실행할 때 문제가 없습니다. 나는 아래로 테스트를 단순화
:
는아이폰 연락처와 iCloud에 등록되어 활성화, 동기화. iPhone도 Exchange로 메일을 체크하도록 설정되어 있습니다. Exchange에서. 세 개의 전화 번호가있는 "Foo Bar"라는 연락처가 있습니다.이 연락처는 iPhone에 올바르게 표시됩니다.
- 일 : 212-111-1111
- 모바일 : 212-222-2222
- 홈 : 212-333-3333
- 작업 팩스이 시점에서 모든 것을 내 응용 프로그램에서 예상대로 작동 : 212-444-4444
연락처 동기화가 활성화 된 상태에서 iPad가 iCloud에 등록되었습니다. 이 장치에는 전자 메일이 구성되어 있지 않습니다.
- 홈 팩스 : 212-555-5555이
- 작업 팩스 : 212-666-6666
은 아이 클라우드는 동기화 후 나는 두 개의 전화 번호와 함께 "푸 바"라는 이름의 사용자를 생성 연락처 "Foo Bar"에는 iPhone의 iOS 연락처 앱에 6 개의 전화 번호가 있습니다. iOS 연락처 앱에서 전화를 걸면 올바른 번호로 전화가 걸립니다.
내 응용 프로그램에서 ABPeoplePickerNavigationController를 표시하고 있습니다. 델리게이트 콜백에서 잘못된 전화 번호가 나타납니다. 사람에
내가이 순서에있는 모든 6 개 전화 번호와 연락처를 참조 선택기 :- 일 : 212-111-1111
- 작업 팩스 : 212-444-4444
- 홈 : 212-333-3333
- 모바일 : 212-222-2222
- 홈 팩스 : 212-555-5555
- 작업 팩스 : 212-666-6666
델리게이트에서 모든 전화 번호가 표시되며 항상이 순서로 표시됩니다. iCloud 항목이 Exchange 번호 위에있는 목록에있는 것 같습니다 (중요한 것은 아닙니다).
- xindex : 0 전화 : (212) 555-5555
- xindex 1 전화 번호 : (212) 666-6666
- xindex 2 전화 번호 : (212) 111-1111
- xindex : (3) 전화 번호 : (212) 444-4444
- xindex 4 전화 번호 : (212) 333-3333
- xindex 5 전화 : (212) 222-2222
I은 각 항목을 선택하면 ~로부터
- 직장 전화 : 식별자 = 0 인덱스 = 0 전화 = (212) 555-5555 (잘못된 :해야 212-111-1111) 사람들은 내가 사람들 피커 위임 이러한 결과를 얻을 선택기
- 작업 팩스 : 식별자 = 1 = 인덱스 1 = 전화 (212) 666-6666 (그름 :이어야 212-444-4444)
- 홈 : 식별자 = 2 인덱스 = 2 = 전화 (212) (111) -1111 (잘못 : 212-333-3333 여야 함)
- 모바일 : 식별자 = 3 색인 = 3 전화 = (212) 444-4444 (잘못된 :해야 212-222-2222)
- 는 홈 팩스 : 식별자 = 0 인덱스 = 0 전화 = (212) 555-5555 (올바른)
- 작업 팩스 : 식별자 = 1 개 인덱스 = 1 전화 = (212) 666-6666 (올바른)
그것은 식별자 대리자에게 전달되는 모양 0과 1의 2 개 가지 항목에 대해 사용되기 때문에 정확하지 않다. 또한 인덱스 매핑에 대한 식별자가 올바르지 않을 수도 있습니다. 내가 올바른 인덱스 번호에 매핑 할 전화 번호 각각에 대해 서로 다른 식별자를보고 기대
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier
{
if (property == kABPersonPhoneProperty) {
ABMutableMultiValueRef multi = ABRecordCopyValue(person, property);
if (multi != NULL) {
//Display all the phone numbers for the object
CFIndex xcount = ABMultiValueGetCount(multi);
NSLog(@"xcount = %lu", (unsigned long)xcount);
for (CFIndex xindex = 0 ; xindex < xcount ; ++xindex) {
CFStringRef xphone = (CFStringRef)ABMultiValueCopyValueAtIndex(multi, xindex);
NSLog(@"xindex:%ld phone:%@", (long)xindex, (__bridge NSString*)xphone);
if (xphone) { CFRelease(xphone); }
}
//Display the selected phone number
CFIndex itemIndex = ABMultiValueGetIndexForIdentifier(multi, identifier);
CFStringRef phone = (CFStringRef)ABMultiValueCopyValueAtIndex(multi, itemIndex);
NSLog(@"identifier:%ld itemIndex:%ld phone:%@", (long)identifier, (long)itemIndex, (__bridge NSString*)phone);
if (phone) { CFRelease(phone); }
CFRelease(multi);
}
}
return NO;
}
:
은 여기 내 간단한 위임 콜백입니다. 내가 누락 된 단계가 있습니까? iOS 7의 버그입니까?
도움이나 의견을 보내 주시면 감사하겠습니다.