// アドレスブックを生成
ABAddressBookRef book = ABAddressBookCreateWithOptions(NULL, nil);
// アドレスブックのレコード配列を取得
CFArrayRef records = ABAddressBookCopyArrayOfAllPeople(book);
// 配列の要素の数だけ繰り返す
for (int i = 0 ; i < CFArrayGetCount(records) ; i++) {
// 1レコード取得
ABRecordRef record = CFArrayGetValueAtIndex(records, i);
// 名を取得
NSString *firstName = (NSString*)ABRecordCopyValue(record, kABPersonFirstNameProperty);
if (firstName == nil) {
firstName = @""; // 無ければ空文字に
}
// 氏を取得
NSString *lastName = (NSString*)ABRecordCopyValue(record, kABPersonLastNameProperty);
if (lastName == nil) {
lastName = @""; // 無ければ空文字に
}
// 氏名を生成
NSString *name = [NSString stringWithFormat:@"%@ %@", lastName, firstName];
NSLog(@"%@", name);
if (firstName != nil) {
CFRelease(firstName);
}
if (lastName != nil) {
CFRelease(lastName);
}
// レコードから電話番号の取得
ABMultiValueRef tels = ABRecordCopyValue(record, kABPersonPhoneProperty);
if (ABMultiValueGetCount(tels)) {
NSString *tel = (NSString*)ABMultiValueCopyValueAtIndex(tels, 0);
NSLog(@"%@", tel);
CFRelease(tel);
}
}
CFRelease(book);
CFRelease(records);
「ABRecordCopyValue」のパラメータで指定するkABPersonFirstNameProperty等で連絡先から何を取得するかを指定します。
その他プロパティには以下のものがあります。
kABPersonFirstName | ファーストネーム |
kABPersonLastName | ラストネーム |
kABPersonMiddleName | ミドルネーム |
kABPersonPrefixProperty | プレフィックス |
kABPersonSuffixProperty | サフィックス |
kABPersonNicknameProperty | ニックネーム |
kABPersonFirstNamePhoneticProperty | ファーストネームの読み |
kABPersonLastNamePhoneticProperty | ラストネームの読み |
kABPersonMiddleNamePhoneticProperty | ミドルネームの読み |
kABPersonOrganizationProperty | 組織 |
kABPersonJobTitleProperty | 役職 |
kABPersonDepartmentProperty | 部門 |
kABPersonDepartmentProperty | Eメール |
kABPersonBirthdayProperty | 誕生日 |
kABPersonNoteProperty | メモ |
kABPersonCreationDateProperty | 作成日 |
kABPersonModificationDateProperty | 更新日 |
kABPersonAddressProperty | 住所 |
kABPersonDateProperty | 日付 |
kABPersonKindProperty | 種別 |
kABPersonPhoneProperty | 電話番号 |
kABPersonInstantMessageProperty | インスタントメッセージ |
kABPersonURLProperty | URL |
kABPersonRelatedNamesProperty | 関係 |
また、アドレスブックから取得した各種情報はCFReleaseで解放する必要があります。(ARCを使用していない場合)