iphone dev - 可以克隆ABRecord吗?

我想在地址簿中删除一个ABPerson(比方说人)然后添加另一个(比如说new),因为属性的某些部分可能会被重用,我想将'person'克隆为'new',这是我的问题,它似乎没有任何功能来做这个克隆,我发现ABRecordCreateCopy但它似乎是MAC指定的,是否有任何api我可以用来避免逐个复制每个属性? 提前致谢! 杰夫     
已邀请:
您可以通过生成vCard表示并从中创建一个
ABRecord
来编写自己的
ABRecordCreateCopy
版本。以下是代码段。记得在不再使用后释放返回的实例。
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);
}
    
我只是做了一些交叉阅读,似乎没有这样的复制功能。 但是关于这个话题有一些观点: 您不必逐个复制值,至少使用
ABRecordCopyCompositeName
,您可以一次复制前缀,后缀,组织,名字和姓氏。 但是,如果只能使用现有记录的某些部分,为什么不将现有记录中不需要的值设置为null或覆盖使用新值更改所需的值。由于您只能使用现有人员的一部分,即使您可以使用
ABRecordCreateCopy
,也必须这样做。而且,既然你删除了老人,我不明白你为什么要删除而不只是首先改变它。 关键是,据我所知,这样做的唯一变化是
ABPhoneBook
中的不同ID。我无法想象这种情况,这将是一个问题,所有其他值都可以改变。     

要回复问题请先登录注册