Установите правильный CNContact.predicateForContacts, чтобы выбрать адрес электронной почты
Как правильно установить CNContact.predicateForContacts
выбрать поле "электронная почта" в CNContacts? Как в 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 ответ
Ваш предикат пытается найти контакты, в которых имя человека соответствует строке lbs
,
Не существует встроенного предиката для поиска контактов с адресом электронной почты, содержащим определенную строку. Решение заключается в использовании enumerateContacts
и посмотрите список адресов электронной почты каждого отдельного контакта. Затем вам нужно будет проверить, содержит ли какой-либо адрес электронной почты контакта строку, которую вы хотите проверить.