Обновить один элемент телефонного контакта в массиве

Я пытаюсь обновить 1 элемент в контактах iphone. Я обновляю массив электронной почты и не хочу влиять на другие в массиве.

Например, я меняю «домашний» адрес электронной почты в своем приложении, но если у них также есть «рабочий» адрес электронной почты в телефонных контактах, он удаляет его и добавляет только новый. Мне нужно сохранить все остальные поля в массиве. То же самое с телефоном или адресом.

Это мое обновление:

let homeEmailEntry : String = email!
let homeEmail = CNLabeledValue(label:CNLabelHome, value:homeEmailEntry as NSString)
contactToUpdate.emailAddresses = [homeEmail]

let saveRequest = CNSaveRequest()
saveRequest.update(contactToUpdate)
try store.execute(saveRequest)

Это добавляет домашнюю электронную почту, но стирает рабочую электронную почту или что-либо еще в массиве.


person Keith    schedule 29.09.2018    source источник


Ответы (1)


Вам необходимо объединить существующие адреса электронной почты с новыми, которые вы добавляете.

contact.emailAddresses = contactToUpdate.emailAddresses + [homeEmail]

Или, альтернативно, вы можете добавить его.

contact.emailAddresses.append(homeEmail)

Я не уверен, что произойдет, если уже есть домашний адрес электронной почты, но вы можете удалить существующий домашний адрес электронной почты, прежде чем добавлять новый.

contact.emailAddresses = contact.emailAddresses.filter({ $0.label != CNLabelHome }) + [homeEmail]
person Callam    schedule 29.09.2018
comment
Это прекрасно работает, именно то, что мне нужно, фильтрующая часть тоже. - person Keith; 30.09.2018