Как указать, какие ячейки отображать в UITableView?

В настоящее время у меня есть UITableView, который показывает список контактов (имена/номера телефонов/изображения), и у меня есть список номеров телефонов с сервера. Мне нужно, чтобы UITableView показывал только те контакты, которые совпадают с номером телефона с сервера. Контакты импортируются с помощью Contact Framework:

func findContacts() {
    let store = CNContactStore()

    let keysToFetch = [CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName),
        CNContactImageDataKey,
        CNContactPhoneNumbersKey]

    let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch)

    do {
        try store.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { (let contact, let stop) -> Void in
            //Saves all contacts as [CNContact]
            self.contacts.append(contact)
        })
    }

И, например, я получаю номера телефонов

var numberArray = [String]()
var number = contacts[indexPath.row].phoneNumbers
let phoneNumber = number.value as! CNPhoneNumber
numberArray.append(phoneNumber.stringValue)

Можно ли указать, когда tableView должен возвращать ячейку, или мне следует попробовать реализовать циклы for _ in _?


person Xernox    schedule 07.12.2015    source источник


Ответы (2)


В enumerateContactsWithFetchRequest вы должны проверить, есть ли номер телефона в списке телефонных номеров, которые вы получаете с сервера.

В противном случае вы можете отфильтровать свой массив контактов, используя методы, представленные в этом ответе: https://stackoverflow.com/a/28733586/1228075

person Armin    schedule 07.12.2015

Лучший способ — загружать в модель данных табличного представления только те адреса, где номера телефонов совпадают, поэтому вам следует отфильтровать результаты, полученные с сервера, прежде чем отображать их в таблице.

person TheEye    schedule 07.12.2015