Я использую fetchedResultsController для заполнения табличного представления списком имен.Когда представление загружается, табличное представление заполняется правильно, используя имена, хранящиеся в Базовых данных.
func attemptFetch() {
let fetchRequest: NSFetchRequest<Respondent> = Respondent.fetchRequest()
let lastSort = NSSortDescriptor(key: "last", ascending: true)
let firstSort = NSSortDescriptor(key: "first", ascending: true)
fetchRequest.sortDescriptors = [lastSort, firstSort]
let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: "firstCache")
controller.delegate = self
self.controller = controller
do {
try controller.performFetch()
} catch {
let error = error as NSError
print ("\(error)")
}
}
Отображение на устройстве:
Проблема I 'у меня есть то, что когда я использую функцию searchBar для поиска имени и использую этот текст для установки предиката, executeFetch завершается ошибкой, указывая на то, что я дал неверный аргумент.Вот моя функция:
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
if let textInSearchBar = searchBar.text {
let fetchRequest: NSFetchRequest<Respondent> = Respondent.fetchRequest()
//set up sortDescriptor for fetch
let lastSort = NSSortDescriptor(key: "last", ascending: true)
let firstSort = NSSortDescriptor(key: "first", ascending: true)
fetchRequest.sortDescriptors = [lastSort, firstSort]
let searchPredicate = NSPredicate(format: "first contains[c] %@", textInSearchBar)
fetchRequest.predicate = searchPredicate
let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
controller.delegate = self
self.controller = controller
do {
try self.controller.performFetch()
} catch {
let error = error as NSError
print ("\(error)")
}
tableView.reloadData()
}
}
Я получаю ошибку:
2018-12-08 15: 33: софт-тач 09.100555-0700 [83481: 3507366] [ошибка] ошибка: SQLCore dispatchRequest: запрос на обработку исключения: нереализованная генерация SQL для предиката: (FIRST CONTAINS [c] «John») (плохое RHS) с userInfo (ноль) CoreData: ошибка: SQLCore dispatchRequest: запрос на обработку исключения:, не реализованГенерация SQL для предиката: (ПЕРВЫЙ СОДЕРЖИТ [c] «Джон») (плохая RHS) с userInfo (ноль)чтобы исключить исключение «NSInvalidArgumentException», причина: «невыполненная генерация SQL для предиката: (FIRST CONTAINS [c]« John ») (плохое RHS)»
Это озадачивает меня, потому что я рассказал о том, каксоздать предикат, и я думаю, что я создал его правильно.Я также знаю, что у меня в базовом классе данных Респондента есть атрибут String:
Я не уверен, в чем я ошибаюсь.Спасибо.