2016-12-21 17 views
0

質問: 私は文字列:"A", "C", "D", "1", "И" (Russian), "你" (Chinese)を持っています。そして私は文字列を持っていますlet alwaysFirstString = "?" 一般的なiOSソートを使うときは、alwaysFirstStringが常に最初になるようにします。 「?」の代わりに「alwaysFirstString」を指定する必要があります。 ?文字列ソートの最小文字

私はことを必要とする理由:私は自分のアプリケーションで自分の連絡先を持っている連絡先を表示する必要が最初に

  • 私のアプリケーションでは、私は電報アプリケーションのように連絡先を表示します(サーバは私にこれらの連絡先を返します)

  • その後、私は他の連絡先(姓の最初の文字でグループ化されています)を表示します

私は連絡先をグループUITableViewに表示します。したがって、コアデータの私のDBContactオブジェクトには、sectionInfoフィールドがあります。通常、このフィールドはA、B、C、F(姓の最初の文字)ですが、いくつかの連絡先(私はそれらが常に最初になりたい)には他の記号が必要です。だから、を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にはこの姓の最初の文字があります。登録された連絡先(sectionInfoに特殊文字を含む)を常に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?

関連する問題