質問: 私は文字列:"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番目にします。
ほとんどの人が電報が何であるか、またはそれが連絡先を表示する方法は考えています。他のアプリを参考にせずにあなたの必要性を十分に説明できるように、質問を更新してください。 – rmaddy
あなたの質問は何ですか?あなたはいくつかの情報を投稿しましたが、実際に何か質問をしたり、問題を説明したりしていませんでした。質問を実際の質問や問題で更新してください。関連するコードを表示する。どのような問題があるのかを説明してください。 – rmaddy
質問を更新しました –