카카오톡에서 번호를 자동으로 등록시키는 걸 보고 API가 있을꺼라고 생각했었죠
이걸 찾느라 얼마나 고생했는데.. 정말 최고의 펌포스팅이라고 자신합니다.. ㅠ
출처 : messace님 블로그 http://messace.tistory.com/56
아이폰의 주소록에는 이름, 이미지, 전화번호, 기념일, 주소, 기타등이 있으며 이는 구조체 형식으로 추출하여
사용할 수 있습니다.
아래 코드는 이중 전화번호와 라벨출력을 하는것이며 나머지 다른것에 관한것도 이와 같은 방법입니다.
아이폰의 주소록의 데이터를 사용하기 위해서는 우선 Frameworks를 추가해야 합니다.
AddressBook.framework를 추가 하시고 AddressBook.h 헤더파일을 import합니다.
// 주소록 프레임웍 헤더파일.
#import <AddressBook/AddressBook.h>
//===================================================//
// 주소록의 모든 정보를 구조체에 저장을 합니다.
//===================================================//
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef
allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex
nPeople = ABAddressBookGetPersonCount(addressBook);
//===================================================//
// 저장된 구조체를 돌면서 해당 데이터를 추출해 옵니다.
//===================================================//
for
(
int
i = 0; i < nPeople ; i++) {
ABRecordRef ref =
CFArrayGetValueAtIndex
(allPeople, i);
CFStringRef
firstName = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
CFStringRef
lastName = ABRecordCopyValue(ref, kABPersonLastNameProperty);
NSNumber
*recordId = [
NSNumber
numberWithInteger: ABRecordGetRecordID(ref)];
NSLog
(@
"Name : %d-%@ %@"
, recordId, (firstName !=
nil
) ? (
NSString
*)firstName : @
""
,
(lastName !=
nil
) ? (
NSString
*)lastName : @
""
);
if
(firstName !=
nil
)
CFRelease
(firstName);
if
(lastName !=
nil
)
CFRelease
(lastName);
// 사진이미지는 여기에 넘어옵니다.
if
(ABPersonHasImageData(ref)) {
// UIImage* image = [UIImage imageWithData:
// (NSData *)ABPersonCopyImageData(ref)];
// image를 저장하는 펑션은 여기에 작성하시면 됩니다.
}
//========================================================//
// 전화번호 구조체 및 카테고리 저장/추출
// 전화번호 구조체에는 전화번호와 집전화, 핸드폰 이런 카테고리 구분이 있으며
// 이것은 Label로 구별합니다.
// Label : kABHomeLabel, kABPersonPhoneIPhoneLabel 등등...
//=======================================================//
ABMultiValueRef phoneNums =
(ABMultiValueRef)ABRecordCopyValue(ref, kABPersonPhoneProperty);
for
(
CFIndex
j = 0; j < ABMultiValueGetCount(phoneNums); j++) {
CFStringRef
label = ABMultiValueCopyLabelAtIndex(phoneNums, j);
CFStringRef
tempRef = (
CFStringRef
)ABMultiValueCopyValueAtIndex(phoneNums, j);
// 전화번호의 형태라벨별로 추출. 다른 형식도 이렇게 추출이 됩니다.
if
(
CFStringCompare
(label, kABPersonPhoneMobileLabel, 0) ==
kCFCompareEqualTo) {
if
(tempRef !=
nil
)
NSLog
(@
"Mobile: %@-%d"
, (
NSString
*)tempRef,i);
}
else
if
(
CFStringCompare
(label, kABPersonPhoneIPhoneLabel, 0) ==
kCFCompareEqualTo) {
if
(tempRef !=
nil
)
NSLog
(@
"iPhone: %@-%d"
, (
NSString
*)tempRef,i);
}
else
if
(
CFStringCompare
(label, kABHomeLabel, 0) ==
kCFCompareEqualTo) {
if
(tempRef !=
nil
)
NSLog
(@
"Home: %@-%d"
, (
NSString
*)tempRef,i);
}
CFRelease
(label);
CFRelease
(tempRef);
}
}
CFRelease
(allPeople);
'2_ 바삭바삭 프로그래밍 > Objective C' 카테고리의 다른 글
Objective C - Hello, World! (1) | 2011.09.05 |
---|---|
objective C - 아이폰 앱에 진동 기능 추가하기 (0) | 2011.06.03 |
Objective-C 클래스 만들기 (2) | 2011.04.14 |
xcode - Class Method VS Instance Method (0) | 2010.12.28 |
xcode - 문자열 관련 함수 (0) | 2010.12.13 |