以任何方式将可导出属性添加到ABPerson

时间:2011-11-01 00:13:06

标签: objective-c cocoa abaddressbook vcard

vCard 3.0标准允许使用带有“X-”前缀的自定义字段扩展卡片。但是,通过Objective-C的addPropertiesAndTypes:setValue:forProperty:方法添加属性似乎不会导致将其导出为其vCard格式的添加。添加的信息会保存到地址簿中,但如果您导出该卡与其他人共享,则新属性会被遗忘。

是否有办法使用AddressBook框架添加将随卡片导出和导入的vCard扩展名(如“X-”)?

如果我手动编辑导出的vCard,则添加的属性不会显示在“地址簿”中,但会通过后续导出保持不变。似乎应该有一种方法以编程方式写入ABPerson,这将导致“X-”vCard属性,然后随后读取该自定义属性。

感谢您提供任何/所有帮助

1 个答案:

答案 0 :(得分:0)

如果它没有开箱即用,也许你可以自己编写代码,也许可以使用Objective-C method swizzling将其调到ABPerson类中。不幸的是,只有当您的应用是进行导出和导入的应用时,才会使用您添加的任何功能。既然你所说的vCard实际上是一种交换格式,那可能不是完全有用的。 (更不用说旋转方法完全是黑客攻击。)

调试器中的一些快速实验让我相信C接口只是在幕后调用Objective-C方法,所以我猜测那里也没有额外的功能。

有趣的是,你说......

  

如果我手动编辑导出的vCard,则不会添加该属性   显示在地址簿中,但通过后续持续存在   出口。

...但我没有看到这种行为。导入的手动编辑的vCard的重新导出不包含我的X-FOOBAR字段。这使得情况看起来更糟糕 - 例如,这意味着,如果某人使用地址簿应用程序导入了包含您的扩展字段的vCard,则您可能会丢失这些字段。但也许我做错了什么。

也许你可以捎带在NOTE字段上?