首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iphone dev -可以克隆ABRecord吗?

iphone dev -可以克隆ABRecord吗?
EN

Stack Overflow用户
提问于 2011-03-06 16:07:06
回答 2查看 622关注 0票数 1

我想在地址簿中删除一个ABPerson (比如说,person),然后添加另一个(比如new),因为属性的某些部分可能会被重用,所以我想克隆“person”到“new”,这里是我的问题,似乎没有函数来做这个克隆,我发现了ABRecordCreateCopy,但它似乎是MAC指定的,有没有什么api可以用来避免逐个复制每个属性?提前感谢!

杰夫

EN

回答 2

Stack Overflow用户

发布于 2013-08-18 15:12:54

您可以通过生成ABRecordCreateCopy表示并从它创建ABRecord来编写您自己的vCard版本。以下是代码片段。记住,一旦不再使用返回的实例,就将其释放。

代码语言:javascript
复制
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);
}
票数 1
EN

Stack Overflow用户

发布于 2011-08-23 04:30:15

我刚刚做了一些交叉阅读,似乎没有这样的复制功能。但这个主题有一些要点:您不必逐个复制值,至少使用ABRecordCopyCompositeName,您可以一次复制前缀、后缀、组织、名字和姓氏。

但是,如果您只能使用现有记录的某些部分,为什么不将现有记录中不需要的值设置为null或使用新值覆盖需要更改的值。因为您只能使用现有person的一部分,所以即使您可以使用ABRecordCreateCopy,也必须这样做。既然你无论如何都要删除老人,我不明白为什么你要删除它,而不是一开始就改变它。问题是,据我所知,这样做的唯一变化是ABPhoneBook中的不同ID。我不能想象这样的情况,这将是一个问题,并且所有其他值都可以改变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5209404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档