Я передаю контакт Идентификатор из диспетчера таблицы таблиц контактов в другой контроллер табличного представления Location. Поэтому я определяю делегата ContactSelectionDelegate и реализую метод userSelectedContact в контроллере Location tableview и получаю contactIdentifierStringКак использовать предикаты с fetchRequest в данных ядра
Я ищу базу данных, чтобы найти соответствие для 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
}
}
}
}
Я получаю ошибку Контакт на этой линии : «Использование Ambiguoius fetchrequest». let fetchRequest = Contact.fetchRequest() – vrao
Изменено: let req: NSFetchRequest = Contact.fetchRequest(). Теперь я получаю ошибку: использование необъявленного типа NSFetchRequest. Похоже, у меня нет подклассов NSManagedObject. Итак, сгенерированные подклассы NSManagedObject для обоих объектов. Я получаю ошибку в объекте Contact внутри Contact + CoreDataProperties.swift, поскольку «Contact является неоднозначным для поиска по типу в этом контексте». Может быть, классы NSManagedObject получили автогенерирование. Кружение с ошибками. Можете ли вы пл. объяснить и как исправить? –
vrao
Я предполагал, что вы используете подкласс NSManagedObject, так как к «providerName» обращается точка с нотной точкой. Подкласс должен содержать метод 'fetchRequest()'. Я обновил ответ. – vadian