私は iOS でカスタム アドレス帳アプリを作成しており、シングルトンの addressbookRef を使用しています。
ここに私の操作手順があります:
+ (ABAddressBookRef) sharedAddressBook
{
static ABAddressBookRef ref = nil;
if ( ref == nil )
{
ref = ABAddressBookCreate();
}
return ( ref );
}
step1: アドレス帳アプリを開く
ABAddressBookRef addressBook = [ABAddressBook sharedAddressBook];
ABRecordRef person = ABAddressBookGetPersonWithRecordID( addressBook, 83 );
NSString* name= ABRecordCopyValue(person,kABPersonFirstNameProperty);
NSLog(@"%@",name);
コンソール出力「aaa」。
ステップ2:
アプリを終了し(kill ではなく、enterBackground に入る)、システム ダイヤラーを使用して「aaa」の人名を「bbb」に変更します。
ステップ3:
アプリを開き(enterForeground)、同じことを行います
ABAddressBookRef addressBook = [ABAddressBook sharedAddressBook];
ABRecordRef person = ABAddressBookGetPersonWithRecordID( addressBook, 83 );
NSString* name= ABRecordCopyValue(person,kABPersonFirstNameProperty);
NSLog(@"%@",name);
コンソール出力「aaa」。
私の質問は
1. 古い addressBookRef を使用すると、コンソールが「bbb」ではなく「aaa」を出力するのはなぜですか? [ABAddressBook sharedAddressBook] を ABAddressBookCreate() に変更すると、すべて問題ないようです。古い addressBookRef を最新の状態に保つことができないのはなぜですか?
2.enterForeground で毎回 ABAddressBookCreate() を実行する必要がありますか?
3.個人情報を編集すると、recordID は変更されますか? 私は疑います。