2016-12-21 2 views
0

Вопрос: У меня есть строки: "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-й.

+0

Большинство людей не имеют ни малейшего представления о том, что телеграмма или как он отображает контакты. Пожалуйста, обновите свой вопрос, чтобы он полностью объяснил вашу потребность без ссылки на другое приложение. – rmaddy

+0

И в чем ваш вопрос? Вы опубликовали некоторую информацию, но на самом деле вы ничего не спросили или не объяснили какие-либо проблемы, которые у вас есть. Обновите свой вопрос с актуальным вопросом или вопросом. Показать соответствующий код. Объясните, какая у вас проблема. – rmaddy

+0

Я обновил вопрос –

ответ

0

Я использовал «» для максимального символа и «» для минимума. Позже в извлеченной результат контроллера делегата у меня есть:

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
     if let sections = fetchedResultsController?.sections { 
      let currentSection = sections[section] 
      let name = currentSection.name 
      if "" == name { 
       return "#" 
      } 
      else if " " == name { 
       return "Registered contacts" 
      } 
      return name 
     } 

     return nil 
    } 

Я нашел последний символ здесь What character to use to put an item at the end of an alphabetic list?

Смежные вопросы