Как использовать предикаты с fetchRequest в Core Data

Я передаю идентификатор контакта из контроллера таблицы контактов в другой контроллер таблицы расположения. Поэтому я определяю делегата ContactSelectionDelegate и реализую метод userSelectedContact в контроллере таблицы расположения Location и получаю contactIdentifierString

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

Может кто-нибудь подсказать, как использовать предикаты с контактом fetchRequest?

Код ContactTableViewController:

protocol ContactSelectionDelegate{
func userSelectedContact(contactIdentifier:NSString)
}

class ContactTableViewController: UITableViewController {

var delegate:ContactSelectionDelegate? = nil

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if (delegate != nil){
        let contactDict:NSDictionary = allContacts.object(at: indexPath.row) as! NSDictionary
        let identifier = contactDict.object(forKey: "uniqueId")
                   delegate!.userSelectedContact(contactIdentifier: identifier as! NSString)
                  self.navigationController!.popViewController(animated: true)
               }
}

}

Код LocationTableViewController:

 class LocationTableViewController: UITableViewController, ContactSelectionDelegate, CLLocationManagerDelegate {

var contactIdentifierString:NSString = NSString()

 func userSelectedContact(contactIdentifier: NSString) {
    var fetchedResults: [Contact] = []

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    do {
        fetchedResults = try context.fetch(Contact.fetchRequest())
    }
    catch {
        print ("fetch task failed")
    }
    if fetchedResults.count > 0 {
        for contact in fetchedResults{
            let aContact:Contact = contact
            if (aContact.uniqueId! == contactIdentifierString as String) {
                providerName.text = aContact.providerName
            }
            else {
                continue
            }
        }
    }


}

Ответы на вопрос(1)

Ваш ответ на вопрос