我想在地址簿中删除一个ABPerson (比如说,person),然后添加另一个(比如new),因为属性的某些部分可能会被重用,所以我想克隆“person”到“new”,这里是我的问题,似乎没有函数来做这个克隆,我发现了ABRecordCreateCopy,但它似乎是MAC指定的,有没有什么api可以用来避免逐个复制每个属性?提前感谢!
杰夫
发布于 2013-08-18 15:12:54
您可以通过生成ABRecordCreateCopy表示并从它创建ABRecord来编写您自己的vCard版本。以下是代码片段。记住,一旦不再使用返回的实例,就将其释放。
ABRecordRef ABRecordCreateCopy (ABRecordRef record)
{
ABRecordRef people[1] = {record};
CFArrayRef peopleArray = CFArrayCreate(NULL, people, 1, &kCFTypeArrayCallBacks);
CFDataRef vCardData = ABPersonCreateVCardRepresentationWithPeople(peopleArray);
ABRecordRef source = ABPersonCopySource(record);
ABRecordRef duplicatedPerson = ABPersonCreatePeopleInSourceWithVCardRepresentation(source, vCardData);
ABRecordRef returnedPerson = CFArrayGetValueAtIndex(duplicatedPerson, 0);
CFRelease(source);
CFRelease(vCardData);
CFRelease(duplicatedPerson);
return CFRetain(returnedPerson);
}发布于 2011-08-23 04:30:15
我刚刚做了一些交叉阅读,似乎没有这样的复制功能。但这个主题有一些要点:您不必逐个复制值,至少使用ABRecordCopyCompositeName,您可以一次复制前缀、后缀、组织、名字和姓氏。
但是,如果您只能使用现有记录的某些部分,为什么不将现有记录中不需要的值设置为null或使用新值覆盖需要更改的值。因为您只能使用现有person的一部分,所以即使您可以使用ABRecordCreateCopy,也必须这样做。既然你无论如何都要删除老人,我不明白为什么你要删除它,而不是一开始就改变它。问题是,据我所知,这样做的唯一变化是ABPhoneBook中的不同ID。我不能想象这样的情况,这将是一个问题,并且所有其他值都可以改变。
https://stackoverflow.com/questions/5209404
复制相似问题