如何修改 CNLabeledValue 的值,保持标识符不变

How to modify the value of a CNLabeledValue, keeping the identifier unchanged

新的 'Contacts' 框架引入了 CNLabeledValue class。此 class 用于管理对标签值。但是 CNLabeledValue 有第三个 属性:标识符。

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

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

我尝试做同样的事情,但如何修改现有获取的 CNLabeledValue 的值,同时保持标识符不变?例如,我想更改 "work" phone 号码。我收到了当前 "work" phone 号码的 CNLabeledValue,现在怎么办?

对于 CNContact,我创建了一个 mutableCopy

    CNMutableContact *mutableContact = [fetchedContact mutableCopy];

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

CNLabeledValue 是一个不可变的值对象,它没有可变版本。我在创建新的 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.