У меня проблема с nspredicate при поиске первого символа в строке поиска с использованием контроллера результатов выборки (FRC).
Делегат панели поиска для updatesearchresult:
//UISearchResultsUpdating
public func updateSearchResults(for searchController: UISearchController){
if let searchText = resultSearchController.searchBar.text , searchController.isActive { Other codes........ }
}
Мой предикат выглядит следующим образом:
let entity = NSEntityDescription.entity(forEntityName: "XMPPUserCoreDataStorageObject", in: moc)!
let sd1 = NSSortDescriptor(key: "nickname", ascending: false)
let sortDescriptors = [sd1]
let fetchRequest:NSFetchRequest<XMPPUserCoreDataStorageObject> = NSFetchRequest(entityName: "XMPPUserCoreDataStorageObject")
fetchRequest.entity = entity
fetchRequest.sortDescriptors = sortDescriptors
fetchRequest.fetchBatchSize = 10
*fetchRequest.predicate = NSPredicate(format:"jidStr contains[c] %@ OR nickname contains[c] %@ ", searchText,searchText)*
Я использую пользовательский путь к ключу раздела ("searchSection"), чтобы отделить раздел Контакты и Групповые чаты следующим образом
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext:moc , sectionNameKeyPath: "searchSection", cacheName: nil)
Для searchSection, объявленного следующим образом
dynamic var searchSection: String {
if(jidStr.contains("+")){
return "Contacts"
}else{
return "Group Chats"
}
}
Вы можете обратиться к прикрепленным изображениям ниже
Нет результата
Срезультат
Интересно, почему при вводе второго символа будет отображаться результат, но не с первым символом для некоторых символов.Надеюсь, любой может помочь.Большое спасибо