Вопрос: У меня есть строки: "A", "C", "D", "1", "И" (Russian), "你" (Chinese)
. И у меня есть строка let alwaysFirstString = "?"
Я хочу, чтобы alwaysFirstString
всегда был первым, когда я использую общую сортировку iOS. Что должно быть alwaysFirstString
вместо "?" ?Минимальная буква для сортировки строк
Почему мне нужно что:
В моем приложении я показываю контакты как в Телеграмма применения:
- Сначала я должен отображать контакты, которые имеют свои собственные контакты в моем приложении (сервер возвращает мне эти контакты)
- После этого я отображаю другие контакты (сгруппированные по первой букве в их фамилии)
Отображение контактов в группе UITableView
. Поэтому в моем объекте DBContact
в основных данных у меня есть поле sectionInfo. Обычно это поле = A, B, C, F (первая буква фамилии), но для некоторых контактов (я хочу, чтобы они всегда были первыми) мне нужно иметь другой символ. Поэтому этот символ всегда должен быть первым, когда я использую обычный sortDesctriptors
в FetchResultController
(лучше для всех языков).
Вот код:
let entityName = kDBContact
let fetchRequest = NSFetchRequest<DBContact>(entityName: entityName)
// let entityDescription = NSEntityDescription.entity(forEntityName: entityName, in: DatabaseManager.sharedInstance.managedObjectContext)
// fetchRequest.entity = entityDescription
fetchRequest.fetchBatchSize = 20
// sort
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "sectionInfo", ascending: true), NSSortDescriptor(key: "nameAndSurname", ascending: true)]
// sometimes we have predicate when user tries to search smth
var predicate: NSPredicate?
var formatForPredicate = ""
// filter not to show fake contacts
formatForPredicate += "(isFakeContact == false)"
var argumentArray = [AnyObject]()
// text filter in search bar
if help_needToShowFilteredContacts() {
if formatForPredicate.length > 0 {
formatForPredicate += " AND "
}
formatForPredicate += "((nameAndSurname CONTAINS[cd] %@) OR (phoneNumbers.numberOnlyDigits CONTAINS[cd] %@))"
argumentArray.append(resultSearchController.searchBar.text! as AnyObject)
argumentArray.append(resultSearchController.searchBar.text! as AnyObject)
}
sectionNameKeyPath = "sectionInfo"
// filter to show only favourites
if segmentedControl.selectedSegmentIndex == segmented_favouriteIndex {
sectionNameKeyPath = nil
if formatForPredicate.length > 0 {
formatForPredicate += " AND "
}
formatForPredicate += "(isFavourite == true)"
}
if formatForPredicate.length > 0 {
predicate = NSPredicate(format: formatForPredicate, argumentArray: argumentArray)
}
fetchRequest.predicate = predicate
self.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest as! NSFetchRequest<NSFetchRequestResult>, managedObjectContext: DatabaseManager.sharedInstance.managedObjectContext, sectionNameKeyPath: sectionNameKeyPath, cacheName: nil)
Таким образом, вы можете увидеть fetchRequest.sortDescriptors = [NSSortDescriptor(key: "sectionInfo", ascending: true), NSSortDescriptor(key: "nameAndSurname", ascending: true)]
. Поэтому в sectionInfo у меня есть первые персонажи фамилии, и я хочу, чтобы зарегистрированные контакты (со специальным символом в разделеInfo) всегда были 1-й.
Большинство людей не имеют ни малейшего представления о том, что телеграмма или как он отображает контакты. Пожалуйста, обновите свой вопрос, чтобы он полностью объяснил вашу потребность без ссылки на другое приложение. – rmaddy
И в чем ваш вопрос? Вы опубликовали некоторую информацию, но на самом деле вы ничего не спросили или не объяснили какие-либо проблемы, которые у вас есть. Обновите свой вопрос с актуальным вопросом или вопросом. Показать соответствующий код. Объясните, какая у вас проблема. – rmaddy
Я обновил вопрос –