iPhoneの電話帳のグループを扱う ABAddressBookRef


ABAddressBookRef

アドレス帳データの生成、保存、削除などを行う
複数の連絡先を格納している手帳みたいなもの


ABRecordRef


アドレス帳の中にレコード(ABRecord)がある
1件毎の各個人の電話帳みたいなもの

レコードには2種類
 - Person Records
  - 氏名、電話番号、Email、住所など
 - Group Records
  - 名前、IDぐらいしかない
    - Groupには複数のPersonRecordをひも付ける事ができる

※ただiPhone単体ではグループの作成はできないらしい

グループ関連の操作

アドレス帳のグループ取得

    ABAddressBookRef book = ABAddressBookCreate();
    CFArrayRef recodes = ABAddressBookCopyArrayOfAllGroups(book);
    for (int i = 0; i < CFArrayGetCount(recodes); i++) {
        ABRecordRef group = CFArrayGetValueAtIndex(recodes, i);
        ABRecordID recodeId = ABRecordGetRecordID(group);
        NSString* str = (NSString*) ABRecordCopyValue(group, kABGroupNameProperty);
        NSLog(@"recodeId:%d group name:%@", (int)recodeId, str);
        CFRelease(str);
    }
    CFRelease(recodes);
    CFRelease(book);

グループの作成

NSString* groupName = @"会社";
    ABAddressBookRef book = ABAddressBookCreate();
    ABRecordRef group = ABGroupCreate();
    ABRecordSetValue(group, kABGroupNameProperty,groupName, nil);
    ABAddressBookAddRecord(book, group, nil);
    ABAddressBookSave(book, nil);
    NSInteger groupId = ABRecordGetRecordID(group);
NSLog(@"groupId:%d", groupId);
    CFRelease(book);
    CFRelease(group);

グループの削除

NSInteger groupId = 1;
    ABAddressBookRef book = ABAddressBookCreate();
    // 削除
    ABRecordRef recode = ABAddressBookGetGroupWithRecordID(book, groupId);
    ABAddressBookRemoveRecord(book, recode, nil);
    ABAddressBookSave(book, nil);
   
    CFRelease(book);

余談ですが、Personの最終更新日は下記で取得可能です

最終更新日の取得
        CFDateRef cfCreateDate = ABRecordCopyValue(person, kABPersonCreationDateProperty);

0 件のコメント:

コメントを投稿

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...