2011-04-21 14 views
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); 

ありがとうございました。

答えて

2

ABPersonレコードを作成しましたが、ABAddressBookAddRecordを使用してアドレスブックに追加したことはありません。それはまたABAddressBookHasUnsavedChangesNOを返す理由です。

+0

ありがとうございます! Appleはアドレス帳プログラミングガイドの例にそれを載せて欲しい。今私はその記録を見る。しかし、ナビゲーションを経由してビューコントローラを終了すると、ABAddressBookCopyArrayOfAllPeopleコマンドからカウントが0になります。どんな考えにも感謝します。 – Jack

+0

ABPersonCreate()のドキュメントには、特にABAddressBookAddRecordが記述されています。これまで使用していなかった機能については、ドキュメンテーションを覚えておく必要があります。 ABAddressBookCopyArrayOfAllPeopleは、アドレス帳の「スナ​​ップショット」を返します。あなたがあなたのことを書いておく前にレコードがなかったら、それはゼロのカウントを持っています。新しく追加したレコードを含む配列を返す場合は、アドレス帳を保存した後に呼び出します。 P.S.私の答えがあなたの質問に答えたら、それを受け入れてください:) – freespace

関連する問題