2014-03-31 4 views
-1

주소록에서 모든 연락처를 가져 와서 내 앱에 표시하려는 앱을 개발 중입니다. 모든 데이터를 가져 왔지만 문제가 있습니다.이 데이터는 알파벳순으로 정렬되지 않고 전화 번호도 이메일로도 오름차순으로 정렬되어 있습니다. id는 적절한 순서로 이름으로 배열되어야합니다. 나는 다른 배열에있는 모든 데이터를 가지고 있습니다. 올바른 것을 생각해보십시오.주소록에서 이름, 이메일 ID 및 모든 전화 번호를 불러 와서 내 ios 앱에 표시하는 방법은 무엇입니까?

+0

http://stackoverflow.com/questions/3747844/get-a-list-of-all-contacts-on-ios – null

+0

당신을했다 알파벳 순서로 해당 배열 성공적으로 주소록에서 연락처를 가져 왔습니까? –

+0

@HimanshuJoshi 그래, 나는 가져 왔지만 문제는 내가 다른 배열의 모든 데이터를 정렬 할 수 없다는 것이다 – user255906

답변

0

당신이 접점을 찾아 배열을 저장 성공적으로 한 경우, 다음 순으로 그냥 Apple Docs 통과

NSArray *sortedArray = [YOUR_ARRAY sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

localizedCaseInsensitiveCompare:를 사용하여 정렬 할 수 있습니다, 당신은이 모든 것을 찾을 수 있습니다. 모든

4

우선 먼저 이름을 다음 변경에 ​​wnat code.You 위의 모든 이메일 주소가 누락되어 있지는 않은가를 얻을 수 있습니다하는 .m 파일

ABAddressBookRef addressBook = ABAddressBookCreate(); 
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook); 
    NSMutableArray *allEmails = [[NSMutableArray alloc] initWithCapacity:CFArrayGetCount(people)]; 
    for (CFIndex i = 0; i < CFArrayGetCount(people); i++) { 
     ABRecordRef person = CFArrayGetValueAtIndex(people, i); 
     ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty); 
     for (CFIndex j=0; j < ABMultiValueGetCount(emails); j++) { 
      NSString* email = (__bridge NSString*)ABMultiValueCopyValueAtIndex(emails, j); 
      [allEmails addObject:email]; 

     } 
     CFRelease(emails); 
    } 
    NSLog(@"All Detils:%@",allEmails); 
    CFRelease(addressBook); 
    CFRelease(people); 

<AddressBook/AddressBook.h>을 가져옵니다.

ABMultiValueRef Name = ABRecordCopyValue(person, kABPersonFirstNameProperty); 

연락 번호 :

ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); 

만 당신이 원하는 사람 속성을 변경합니다. 종류 후

// Property keys 
AB_EXTERN const ABPropertyID kABPersonFirstNameProperty;   // First name - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonLastNameProperty;   // Last name - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonMiddleNameProperty;   // Middle name - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonPrefixProperty;    // Prefix ("Sir" "Duke" "General") - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonSuffixProperty;    // Suffix ("Jr." "Sr." "III") - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonNicknameProperty;   // Nickname - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonFirstNamePhoneticProperty; // First name Phonetic - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonLastNamePhoneticProperty; // Last name Phonetic - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonMiddleNamePhoneticProperty; // Middle name Phonetic - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonOrganizationProperty;  // Company name - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonJobTitleProperty;   // Job Title - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonDepartmentProperty;   // Department name - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonEmailProperty;    // Email(s) - kABMultiStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonBirthdayProperty;   // Birthday associated with this person - kABDateTimePropertyType 
AB_EXTERN const ABPropertyID kABPersonNoteProperty;    // Note - kABStringPropertyType 
AB_EXTERN const ABPropertyID kABPersonCreationDateProperty;  // Creation Date (when first saved) 
AB_EXTERN const ABPropertyID kABPersonModificationDateProperty; // Last saved date 

NSArray *EmailArray = [allEmails sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 
+0

나는 그것이 좋을 것이라고 생각하지만, 문제는 당신이 전자 메일에 대해 설명 했음에도 불구하고 전자 메일이있는 연락처 만 제공한다는 것입니다. 예를 들면. 나는 나의 addresbook에 20 개의 연락처를 가지고있다. 나는 20 개의 모든 것을 가져오고 싶다. 심지어 전화 번호와 이메일도 가지고있다. – user255906

+0

모든 번호를 확인하고 emailid가 –

+0

인지 여부를 확인하십시오.하지만 이것을 사용하면 emil id가 포함 된 결과를 얻을 수 있지만 전화 번호와 이메일 아이디가있는 모든 연락처가 필요합니다. – user255906

관련 문제