2010-04-23 4 views

답변

26

으로 전화하여 주소록에있는 모든 사람 레코드의 배열을 가져옵니다. 그런 다음 the documentation를 따르

, 사람들의 배열을 정렬 비교 등의 기능 ABPersonComparePeopleByName 및 유형 ABPersonSortOrdering의 컨텍스트 기능 CFArraySortValues를 사용합니다. ABPersonGetSortOrdering에 의해 반환 된 사용자가 원하는 정렬 순서는 일반적으로 선호되는 컨텍스트입니다.

다음 코드 목록은 전체 주소록 데이터베이스 정렬의 예를 보여줍니다 :

ABAddressBookRef addressBook = ABAddressBookCreate(); 
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook); 
CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(
              kCFAllocatorDefault, 
              CFArrayGetCount(people), 
              people 
           ); 

CFArraySortValues(
     peopleMutable, 
     CFRangeMake(0, CFArrayGetCount(peopleMutable)), 
     (CFComparatorFunction) ABPersonComparePeopleByName, 
     (void*) ABPersonGetSortOrdering() 
); 

CFRelease(addressBook); 
CFRelease(people); 
CFRelease(peopleMutable); 
7

어떻게 이것에 대해 : - 나는

ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering 

ABPerson.h

+0

이 스위프트에 사용되는 방법

케빈이

? – Developer

4

선언 오전 위의 코드 (승인 된 답변에서)를 사용하여 iPhone에서 주소록을 복사하고 ABPersonComparePeopleByName 주소록 정렬 용. 그러나 iPhone의 국제 언어가 다른 경우 동일한 주소록에 대해 정렬 결과가 다를 수 있다는 것을 알게되었습니다. 다른 기준에 따라 다른 언어를 정렬하는 것이 합리적이라고 가정합니다. 그래서 우리 프로젝트에는 "en.lproj".. "zh-hant.lproj"... "ja.lproj"가 있고 NSCalendar에는 "locale"설정이 있습니다. 따라서 ABPersonComparePeopleByName에 대한 기준을 설정하는 방법을 생각하고 Apple에 질문했습니다. 매우 유용한 답변 : "정렬 순서를 예측할 수 없습니다.".

애플의 답변의 관련 부분은 다음과 같습니다 :

이것은 실제로 정상적인 동작입니다. 다른 언어로 정렬하는 것은 사실 사용자의 기대가 언어/위치에 따라 크게 달라지는 매우 복잡한 문제입니다. 솔직히 최선의 선택은 예상을 조정하고 정렬 순서를 예측할 수 없다고 가정하는 것입니다. 다른 접근 방식은 많은 국제 사용자를 괴롭 히고 혼란스럽게 할 가능성이 높습니다. 케빈 엘리엇, DTS 엔지니어, kevin_elliott의 @ 사과, COM은

+0

이 게시물에 대한 링크도 추가하십시오. – tipycalFlow

관련 문제