将CNContact添加到CNGroup并从CNGroup提取CNContacts不起作用

所以我试图建立CNContact并将该联系人添加到某些CNGroup中。这部分正在工作。从选定的CNGroup提取CNContact不会返回任何结果。另外,我注意到在我的联系人应用程序中,自定义组位于Gmail下,当我选择该自定义组时,我看不到任何联系人。

我尝试了很多事情,但是最重要的是,我看到在创建和获取联系人时得到的那个组具有相同的标识符,因此它应该可以工作。

创建群组:

CNGroup: 0x281784c00: identifier=E43F7D4A-3240-49FB-9D22-B79E3325A080:ABGroup,name=tempContacts,iOSLegacyIdentifier=5,creationDate=(null),modificationDate=(null),externalIdentifier=(null),externalRepresentation=(null),externalModificationTag=(null),externalUUID=(null)>

要删除的组:

<CNGroup: 0x2803fd3e0: identifier=E43F7D4A-3240-49FB-9D22-B79E3325A080:ABGroup,externalUUID=(null)>

此外,它仅在我添加联系人并立即将其删除时才有效。但是,如果我在一个会话上创建联系人,而在另一个应用程序启动时,尝试从同一组中获取联系人(是的,标识符相同),将没有结果。

用于提取同一组中联系人的扩展名

extension CNContactStore
 func contacts(for group: CNGroup) -> [CNContact] {
        let predicate = CNContact.predicateForContactsInGroup(withIdentifier: group.identifier)
        let fetchRequest = CNContactFetchRequest(keysToFetch: [CNContactPhoneNumbersKey as CNKeyDescriptor,CNContactGivenNameKey as CNKeyDescriptor,CNContactFamilyNameKey as CNKeyDescriptor])
        fetchRequest.predicate = predicate

        var foundContacts: [CNContact?] = []

        try? self.enumerateContacts(with: fetchRequest) { contact,_ in
            foundContacts.append(contact)
        }

        return foundContacts.compactMap { $0 }
    }
 func createTemporary(name: String,phoneNumber: String) {
        guard hasPermission() else { return }


        let mutableContact = CnmutableContact()
        if let name = name {
        mutableContact.givenName = name
        }

        mutableContact.contactType = .person

        let phoneNumber = CNLabeledValue<CNPhoneNumber>(label: "temp",value: CNPhoneNumber(stringValue: phoneNumber))
        mutableContact.phoneNumbers = [phoneNumber]

        let saveRequest = CNSaveRequest()

        saveRequest.add(mutableContact,toContainerWithIdentifier: nil)
        if let group = retriveContactGroup(for: .temporary) {
            saveRequest.addMember(mutableContact,to: group)
        }

        do {
            try store.execute(saveRequest)
        } catch {
            print(error.localizedDescription)
        }
    }
 private func contactGroup(for groupName: GroupName) -> CNGroup? {
        do {
            let groups = try store.groups(matching: nil)
            let filteredGroups = groups.filter { $0.name == groupName.name }
            return filteredGroups.first
        } catch {
            return nil
            print("Error finding group")
        }
    }
 private func retriveContactGroup(for groupName: GroupName) -> CNGroup? {
        // Try to get contact group
        if let group = contactGroup(for: groupName) {
            return group
        } else {
            // Try to create the group
            do {
                let saveRequest = CNSaveRequest()
                let newGroup = CnmutableGroup()
                newGroup.name = groupName.name
                saveRequest.add(newGroup,toContainerWithIdentifier: nil)
                try store.execute(saveRequest)
                print("Created a new group")
                return newGroup
            } catch {
                print("Failed to save new group")
                return nil
            }
        }
    }
zn890811 回答:将CNContact添加到CNGroup并从CNGroup提取CNContacts不起作用

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3152300.html

大家都在问