2012-04-30 30 views
0

處理別人的代碼。我真的很困惑這個代碼中究竟發生了什麼。設置人物屬性

ABAddressBookRef addressBook = ABAddressBookCreate(); 
ABRecordRef persons = ABAddressBookGetPersonWithRecordID(addressBook, x); 
CFErrorRef *error=NULL; 
ABAddressBookRemoveRecord(addressBook, persons, error); 
ABAddressBookSave(addressBook, error); 

ABRecordRef persons = ABPersonCreate(); 

ABRecordSetValue(persons, kABPersonFirstNameProperty, firstName , nil); 

應該做的是應該創建一個ABRecordRef人。他的屬性應該被設置並且他的記錄/細節應該被顯示。他永遠不應該被保存在地址簿中。這是做到這一點的方法。需要幫忙。

編輯:除了設置屬性給人,以下代碼被添加到推視圖控制器來查看人。

MyContactDetailViewcontroller *personContactDetail = [[MyContactDetailViewcontroller alloc] init]; 
personContactDetail.displayedPerson = persons; 
personContactDetail.passedSelectedContactData = selectedContactsOnlyData; 
[self.navigationController pushViewController:personContactDetail animated:YES]; 
[personContactDetail release]; 

MyContactDetailViewcontrollerABPersonViewController。或者更容易使用ABUnknownPersonViewController

你覺得其中的聯繫人可以在地址簿中複製任何情況下

回答

1

這正是這裏發生了什麼。我會解釋..

ABAddressBookCreate創建從數據的新地址簿地址簿數據庫,因此,只要致電ABAddressBookSave(),您對ABAddressBookRef所做的任何更改都將僅保存到實際地址簿數據庫中。所以它正在做的是獲得recordid-x的人的參考。比你正在創建使用

ABRecordRef persons = ABPersonCreate(); 

和比你它的值設置一個新的人進入,但是這是適用於這個特定的對象,而不是存儲在除非你調用數據庫... ABAddressBookSave()

希望這可以幫助你... :)

+0

當ABAddressBookSave()被調用時,該人實際上被保存到地址簿中,並且其屬性的任何改變也將反映在地址簿中。是這樣嗎? –

+0

ABAddressBookSave()在創建人之後不會被調用,因此NO。如果再次調用ABAddressBookSave()而不是YES(僅限於此前所做的更改)。 –

+0

'ABAddressBookSave(addressBook,error);'。這段代碼是做什麼的。它是否拯救了一個沒有任何財產的人? –