1
初めての訪問時に新しいエントリで新しいレコードを作成するビューコントローラを作成しました。残念ながら、新しいレコードは保存されていません。前のページに移動して戻るときにこれを伝えることができます。新しいレコードは表示されません。私は別にNSStringである "ユーザー"を表示しました。また、保存されていない変更がないというNSLogメッセージも表示されます(下記のif文を参照)。添付されたコード:iphoneアドレス帳にレコードが保存されていません
(void)viewDidLoad { [super viewDidLoad];
ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *people = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
person = ABPersonCreate();
bool didSet = ABRecordSetValue(person, kABPersonFirstNameProperty, user, &error);
if (!didSet) {
NSLog(@"the RecordSetValue error is %@", error);
}
ABMutableMultiValueRef multiURL = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(multiURL,user,kABPersonHomePageLabel,NULL);
ABRecordSetValue(person, kABPersonURLProperty, multiURL, &error);
CFRelease(multiURL);
//save values to address book
NSLog(@"does address book have unsaved changes? %@",ABAddressBookHasUnsavedChanges(addressBook) ? @"YES" : @"NO");
bool didSave = ABAddressBookSave(addressBook, &error);
if (!didSave) {
NSLog(@"the save to address book error is %@", error);
}
CFRelease(addressBook);
ありがとうございました。
ありがとうございます! Appleはアドレス帳プログラミングガイドの例にそれを載せて欲しい。今私はその記録を見る。しかし、ナビゲーションを経由してビューコントローラを終了すると、ABAddressBookCopyArrayOfAllPeopleコマンドからカウントが0になります。どんな考えにも感謝します。 – Jack
ABPersonCreate()のドキュメントには、特にABAddressBookAddRecordが記述されています。これまで使用していなかった機能については、ドキュメンテーションを覚えておく必要があります。 ABAddressBookCopyArrayOfAllPeopleは、アドレス帳の「スナップショット」を返します。あなたがあなたのことを書いておく前にレコードがなかったら、それはゼロのカウントを持っています。新しく追加したレコードを含む配列を返す場合は、アドレス帳を保存した後に呼び出します。 P.S.私の答えがあなたの質問に答えたら、それを受け入れてください:) – freespace