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

时间:2015-10-16 01:37:36

标签: objective-c frameworks ios9 contacts

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

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

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

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

对于CNContact,我创建了一个mutableCopy

    CNMutableContact *mutableContact = [fetchedContact mutableCopy];

可以修改mutableContact并保留相同联系人标识符,而不是提取的联系人。

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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:value

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