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

Pat*_*ckV 6 frameworks objective-c contacts ios9

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

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

因此,如果在联系人应用程序中用户更改标签或值或两者,则无关紧要,因为我们可以使用标识符来标识CNLabeledValue.Contacts App修改CNLabeledValue,保持标识符不变.

我尝试做同样的事情但是如何修改现有提取的CNLabeledValue的值,保持标识符不变?例如,我想更改"工作"电话号码.我收到了CNLabeledValue的当前"工作"电话号码,现在是什么?

对于CNContact,我创建了一个mutableCopy

    CNMutableContact *mutableContact = [fetchedContact mutableCopy];
Run Code Online (Sandbox Code Playgroud)

可以修改mutableContact并保持获取的联系人相同的联系人标识符.

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

用另一个标识符替换CNLabeledValue与另一个标识符是不公平的,因为我的应用程序可能不是从Contacts中获取的唯一一个...我不会欣赏另一个应用程序修改CNLabeledValue标识符...

任何的想法?

sim*_*per 1

刚刚做了一些非常快速的研究,看起来你想要使用的是:

- (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 :值:

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