我有一个存储所有本地用户联系人的DB。现在我想使用新的框架(联系人框架),我的问题是,CNContact现在有一个新的标识符(不再是自动递增的标识符),称为“标识符”,而且我不能在数据库中使用可能更新联系人的旧条目。
我有两个问题:
谢谢。
编辑:我已经为苹果开了一张机票,答案是:
没有计划在以下基础上解决这一问题: 1) iOSLegacyIdentifier是CNContact的专用API。2)在CNContact上不提供修改日期。 要迁移DB,您可以按名称匹配联系人,并通过手动匹配其他属性(如电子邮件地址或电话号码)来消除歧义。 我们现在结束这份报告。
正如你所看到的,没有真正的解决办法,我们不得不猜测..
发布于 2015-09-30 09:52:02
1.不存在。只有私人的选择器
[CNContact iOSLegacyIdentifier];或者你也可以得到同样的
[CNContainer CNContainerIOSLegacyIdentifierKey];请注意,这不是在框架中编译的。使用执行选择器
2.新框架中没有这类财产。如果您拆卸联系人框架,您可以看到uniqueId仍然用于触及底层核心数据的谓词中。但这是你的作品,再次与私人选择者共舞
(指责苹果,而不是我,因为没有办法)。看看框架的内部结构。
发布于 2016-09-22 18:42:25
您可以使用新的联系人框架获得ContactID (iOSLegacyIdentifier)。我用这个在我的应用程序中找到iOSLegacyIdentifier进行特定的联系,你可以随意修改。
let predicate = CNContact.predicateForContacts(matchingName: "contactName")
let toFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactIdentifierKey]
do{
let contacts = try self.contactStore.unifiedContacts(matching: predicate, keysToFetch: toFetch as [CNKeyDescriptor])
for contact in contacts{
var diccionario:[String : Any] = contact.dictionaryWithValues(forKeys: ["iOSLegacyIdentifier"])
//With this you can see/obtain iOSLegacyIdentifier
print(diccionario["iOSLegacyIdentifier"] as! Int)
return;
}
} catch let err{
print(err)
}https://stackoverflow.com/questions/32721698
复制相似问题