[iOS Study] 연락처 프로그래밍 가이드 in iOS - Direct Interacting
https://developer.apple.com/library/ios/documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/Chapters/DirectInteraction.html
-
address book 은 유저의 정보이기 떄문에 다룰 때 주의해야 한다.
보통 변경사항에 대해 user 에게 confirm 을 받는다.
group 에 대해서도 마찬가지이다.
-
record 에는 id 가 있는데, 이 id 를 오랫동안 잡고 있는 것은 정확성이 떨어질 수 있다.
그래서 이 id 와 pair 로 name 을 가지고 있어서, operation 을 하기 전에 name 을 비교하는 것이 추천된다.
-
record 의 id 를 얻으려면 ABRecordGetRecordID 함수를 사용하면 된다.
id 로 person 을 찾으려면 ABAddressBookGetPersonWithRecordID 를 사용하면 된다.
id 로 group 을 찾으려면 ABAddressBookGetGroupWithRecordID 를 사용한다.
name 으로 person 을 찾으려면 ABAddressBookCopyPeopleWithName 을 사용하면 된다.
Person Record 와 놀기
-
ABAddressBookAddRecord 와 ABAddressBookRemoveRecord 를 통해 추가하고 지울 수 있다.
-
AddressBook db 에서 person 을 찾는 것은 2가지로 가능하다.
한 가지는 이름, 두번째는 id 이다.
이름으로 찾기는 ABAddressBookCopyPeopleWithName
id 로 찾기는 ABAddressBookGetPersonWithRecordId 이다.
다른 종류의 search 는 ABAddressBookCopyArrayOfAllPeople 함수를 통해 모든 record 를 가져와서,
NSArray 의 filteredArrayUsingPredicate: 함수를 사용하여 filtering 한다.
NSArray* allContacts = /* assume this exists */ ;
// 010 으로 시작하는 번호 찾기
NSPredicate* predicate = [NSPredicate predicateWithBlock: ^(id record, NSDictionary* bindings) {
ABMultiValueRef phoneNumbers = ABRecordCopyValue( (__bridge ABRecordRef)record, kABPersonPhoneProperty);
BOOL result = NO;
for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) {
NSString* phoneNumber = (__bridge_transfer NSString*) ABMultiValueCopyValueAtIndex(phoneNumbers, i);
if ([phoneNumber hasPrefix:@"(010)"]) {
result = YES;
break;
}
}
CFRelease(phoneNumbers);
return result;
}];
NSArray* filteredContacts = [allContacts filteredArrayUsingPredicate:predicate];
-
people array 를 sort 하기 위해서는 CFArraySortValues 함수를 활용한다.
ABPersonComparePeopleByName 과 ABPersonSortOrdering() 을 전달한다.
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);
Group Record 와 놀기
-
ABAddressBookGetGroupWithRecordID 를 통해 특정 그룹을 조회할 수 있다.
ABAddressBookCopyArrayOfAllGroups 를 통해 모든 그룹을 가져올 수도 있다.
ABAddressBookGetGroupCount 를 통해 모든 그룹의 수를 가져올 수 있다.
-
그룹에 사람을 추가하면 ABGroupAddMember 를 사용하고, 그룹에서 사람을 제거하려면 ABGroupRemoveMember 를 사용하면 된다.
'프로그래밍 놀이터 > iOS' 카테고리의 다른 글
[iOS] 특정 계정의 연락처에 접근하려면? (0) | 2017.06.22 |
---|---|
[iOS] __bridge 와 __bridge_transfer (0) | 2017.06.21 |
[iOS Study] 연락처 프로그래밍 가이드 in iOS - BaseObjects (0) | 2017.06.19 |
[iOS] CFArray 에서 CF 가 뭔가요? (0) | 2017.06.18 |
[iOS] NS_AVAILABLE_IOS 와 NS_DEPRECATED_IOS 의 의미는? (0) | 2017.06.17 |
댓글