CNContact标识符中的“:ABPerson”字符串是什么?

What is the ":ABPerson" string in CNContact identifier?

提问人:General Failure 提问时间:12/29/2016 最后编辑:12214129_Chelsa MJGeneral Failure 更新时间:1/9/2023 访问量:2098

问:

我的 iOS 应用程序会不时检查联系人,并将新联系人导入到自己的数据库中。

我检查了该联系人,它已经存在于字段旁边,通常由 UUID 填充:identifier

CNContactStore *store = [CNContactStore new];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError *error) {
    if (granted) {
        NSArray *keys = @[CNContactNamePrefixKey,
                          CNContactGivenNameKey,
                          CNContactMiddleNameKey,
                          CNContactFamilyNameKey,
                          CNContactInstantMessageAddressesKey];
        NSString *containerId = store.defaultContainerIdentifier;
        NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId];
        NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&err];
        for (CNContact *contact in cnContacts) {
            ...
            NSString *contactId = [contact identifier];
            [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"uuid == %@", contactId]];

        ...

    }

有时,标识符不包括包含字符串的 UUID(例如 ),并且此类联系人仅出现一次。下次,将出现相同的联系人,但使用另一个 UUID 且没有字符串。:ABPerson9326A125-3C0A-494F-9E50-BBFCF1140EF0:ABPerson:ABPerson

因此,我的联系人导入器认为它们是 2 个不同的联系人并保存了 2 次。

CNContact 标识符中的字符串是什么?
我知道带有类的 AddressBook 框架,但我使用该框架来处理设备联系人,为什么字符串会出现在这里?
我是否可以只过滤或检查标识符中的此字符串以防止联系人重复?
标识符中是否可能包含其他字符串?
:ABPersonABPersonContacts:ABPersonCNContact

IOS Objective-C CNcontact

评论

1赞 Sagar Shirbhate 12/29/2016
您是否使用enumeratecontactswithfetchrequest来获取联系人?
0赞 General Failure 12/30/2016
不,我使用的是方法。我更新了我的代码,所以你可以看看这个。unifiedContactsMatchingPredicate:predicate:
2赞 poGUIst 4/11/2017
如果您在地址簿中使用 Google 帐户,则在保存到地址簿后,Google 会将联系人标识符更改为不带“:APBerson”的自我标识符。首先,它只是删除:ABPerson,但在重新启动后,它将联系人标识符更改为另一个GUID。在其他联系人提供商上,可能是其他更改卡标识符的规则,因此最好不要使用联系人标识符。
1赞 General Failure 10/26/2017
@suresh-durishetti,我使用他们的电话号码管理联系人,这些电话号码也具有并且与联系人不同的是,不会在应用程序会话之间更改它们UUID
1赞 Diogo Antunes 3/22/2018
你找到这个问题的答案了吗?

答:

0赞 chepiok 7/6/2021 #1

看起来像是从“联系人”应用程序共享联系人时添加的。顺便说一句,要小心,因为即使在同一设备上,共享联系人也可能具有不同的ID。:ABPerson