Привет, приложение. Я получаю контакты из адресной книги и, как только они обновляются, хранит ее. Db. Это код для получения всех контактов из адресной книги.
func getAllContactsFromAddressBook() {
do {
let contactsFetchRequest = CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey as NSString,
CNContactFamilyNameKey as NSString,
CNContactImageDataKey as NSString,
CNContactImageDataAvailableKey as NSString,
CNContactPhoneNumbersKey as NSString,
CNContactEmailAddressesKey as NSString,
CNContactOrganizationNameKey as NSString,
CNContactJobTitleKey as NSString,
CNContactSocialProfilesKey as NSString ])
try store.enumerateContacts(with: contactsFetchRequest, usingBlock: { (cnContact, error) in
if cnContact.givenName == "", cnContact.familyName == "", cnContact.emailAddresses.count == 0 {
} else {
if realmStore.findContact(byId: cnContact.identifier) == nil {
let contact = Contact()
contact.id = cnContact.identifier
_ = realmStore.create(contact: contact)
}
if let contact = realmStore.findContact(byId: cnContact.identifier) {
do {
try realmStore.write {
contact.firstName = cnContact.givenName
contact.lastName = cnContact.familyName
contact.phoneNumber.removeAll()
contact.phoneNumber.append(objectsIn: cnContact.phoneNumbers.map({
let p = PhoneNumber()
p.phoneNumber = $0.value.stringValue
return p
}))
contact.email.removeAll()
contact.email.append(objectsIn: cnContact.emailAddresses.map({
let e = Email()
let email = $0.value as String
e.email = email == "" ? nil : email
return e
}))
contact.organization = cnContact.organizationName
contact.jobTitle = cnContact.jobTitle
contact.fromLinkedIn = cnContact.socialProfiles.filter({ $0.value.service == "LinkedIn" ? true : false }).first != nil ? true : false
if cnContact.imageDataAvailable == true {
contact.profileImageBlob = cnContact.imageData
}
}
contact.updatePriortyScore()
}
catch {
print("Couldn't update contact")
}
}
}
})
} catch {
print(error)
}
}
Выборка контактов работает нормально, но каждый раз, когда загружается представление, происходит выборка всего списка контактов из адресной книги, что занимает время, поэтому есть способ, который уведомит меня о конкретном контакте в адресе, который был изменен, или если новый контакт был добавлен в адресную книгу, чтобы можно было обновлять список областей.