设置正确的CNContact.predicateForContacts以选择电子邮件

时间:2018-02-18 10:42:24

标签: swift nspredicate cncontact

设置CNContact.predicateForContacts在CNContacts中选择字段“email”的正确方法是什么?就像在SQL where email like "%lbs%"中一样?

这是我删除大量我想要删除的导入联系人的功能。但该函数返回0次点击。但是现场电子邮件中有超过1000个“lbs”联系人。

func deleteContacts(){
    let store = CNContactStore()

    let predicate = CNContact.predicateForContacts(matchingName: "lbs")
    let toFetch = [CNContactEmailAddressesKey]

    do{
        let contacts = try store.unifiedContacts(matching: predicate,keysToFetch: toFetch as [CNKeyDescriptor])

        guard contacts.count > 0
            else{
            print("No contacts found")
            return
        }

        guard let contact = contacts.first else{
            return
        }

        let req = CNSaveRequest()
        let mutableContact = contact.mutableCopy() as! CNMutableContact
        req.delete(mutableContact)

        do{
            try store.execute(req)
            print("Success, deleted the data: Count:  \(contacts.count)")
        } catch let e{
            print("Error = \(e)")
        }
    } catch let err{
        print(err)
    }
}

1 个答案:

答案 0 :(得分:1)

您的谓词正在尝试查找姓名与字符串lbs匹配的联系人。

没有用于查找具有包含特定字符串的电子邮件地址的联系人的内置谓词。解决方案是使用enumerateContacts并查看每个联系人的电子邮件地址列表。然后,您需要检查联系人的任何电子邮件地址是否包含您要检查的字符串。