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];

MyContactDetailViewcontroller子类ABPersonViewController。还是更适合使用ABUnknownPersonViewController.

您是否发现通讯录中的联系人可能重复的任何情况

4

1 回答 1

1

这正是这里发生的事情..我会解释..

ABAddressBookCreate从地址簿数据库中的数据创建一个新的地址簿,因此您所做的任何更改ABAddressBookRef都只会在您调用 后保存到实际的地址簿数据库中ABAddressBookSave()。所以它正在做的是为具有 recordid- 的人获取参考x。比你创建一个新的人条目使用

ABRecordRef persons = ABPersonCreate(); 

并且比您设置它的值,但这可用于此特定对象并且不存储在数据库中,除非您调用...ABAddressBookSave()

希望这可以帮助你... :)

于 2012-04-30T16:17:47.983 回答