新的“联系人”框架引入了CNLabeledValue类。此类用于管理对标签值。但是CNLabeledValue具有第三个属性:标识符。

在文档中,我们可以阅读:
建议您在重新获取的联系人中搜索先前已知的带标签的值对象时使用标识符。标识符可以在应用程序启动之间保留。

因此,如果用户在“联系人”应用程序中更改了标签或值,或同时更改了两者,则没关系,因为我们可以使用标识符来标识CNLabeledValue。联系人应用程序修改CNLabeledValue,使标识符保持不变。

我尝试做同样的事情,但是如何修改现有的获取的CNLabeledValue的值,同时保持标识符不变?例如,我要更改“工作”电话号码。我收到了当前“工作”电话号码的CNLabeledValue,现在怎么办?

对于CNContact,我创建了mutableCopy

    CNMutableContact *mutableContact = [fetchedContact mutableCopy];

可以修改mutableContact,并使与获取的联系人保持相同的联系人标识符。

CNLabeledValue是一个不可变的值对象,它没有可变的版本。创建新的CNLabeledValue时,我也无法给出标识符。

用新的CNLabeledValue标识符替换CNLabeledValue标识符是不公平的,因为我的应用程序可能不是从通讯录中获取的唯一应用程序。

任何想法?

最佳答案

刚刚进行了一些非常快速的研究,看起来您想要使用的是:
- (instancetype)labeledValueBySettingLabel:(NSString *)label value:(ValueType)value
https://developer.apple.com/library/watchos/documentation/Contacts/Reference/CNLabeledValue_Class/index.html#//apple_ref/occ/instm/CNLabeledValue/labeledValueBySettingLabel:value:

从文档中:Returns a labeled value object with the specified label and value with the existing identifier.

10-08 12:16