コアデータにバックアップ検索を追加しようとしていて、パフォーマンスの問題が発生し始めました。私は現在、2つのNSFetchedResultsController
(通常のものと検索のもの)の関連付けをしています。私のUISearchDisplayDelegate
メソッドでは、私は毎回NSFetchedResultsController
をリリースして再作成します。しかし、これは入力中に遅延を引き起こします! NSFetchedResultsController
をフィルタするより効率的な方法はありますか?バッチサイズを約50項目に設定していて、データベースに差がある場合は、数千のレコードがあります。ありがとう!iOSフィルタNSFetchedResultsControllerが効率的に
3
A
答えて
4
NSFetchedResultsController
documentationは、それはかなり明確になります:
- キャッシュがある場合は、それを削除します。
fetchRequest
プロパティを更新します。既存のフェッチ要求を単純に変更することはできません。新しいものを作成する必要があります。-executeFetch:
を呼び出します。私は助けFetchedResultControllerNSPredicate *pre = [NSPredicate predicateWithFormat:@"attribute CONTAINS [cd] %@", searchString]; NSArray *searchResults = [[self.fetchedResultsController fetchedObjects] filteredArrayUsingPredicate:pre]
希望の結果をフィルタリングするために、次のコードを使用し
3
!
+0
この方法は、 'UITableView'を行ごとに更新する必要がある場合には使用できません。 –
0
することができますはい:
NSFetchRequestインスタンスを作成し、そのソート記述するたびに変更します。
let shortDescriptor = NSSortDescriptor(key: key, ascending: ascending)
request.sortDescriptors = [shortDescriptor]
do {
try fetchedResultViewController?.performFetch()
} catch let error as NSError {
print("Error in fetch \(error)")
}
はリンゴのドキュメントを読むhttps://developer.apple.com/reference/coredata/nsfetchedresultscontroller
関連する問題
- 1. btwフィルタとループの効率的なアプローチ
- 2. jQueryのフィルタ効率
- 3. が効率的に
- 4. が効率的に
- 5. オラクルが効率的
- 6. が効率的にsitutation
- 7. は、効率的に私が
- 8. Objective C iOSでの文字列解析が効率的に
- 9. 複数の列パターンによる効率的なフィルタ行
- 10. CでのBloomフィルタの効率的な実装?
- 11. 効率的なマップとフィルタの組み合わせvs stdlibs
- 12. 効率的な反復が
- 13. 効率的な方法が
- 14. 私が最も効率的
- 15. 効率的ルビー
- 16. を効率的
- 17. 効率的
- 18. を効率的
- 19. を効率的
- 20. を効率的
- 21. を効率的
- 22. を効率的
- 23. 効率的recyclerview
- 24. 効率的
- 25. を効率的
- 26. Calendar.getInstance()を効率的に呼び出すことが効率的ですか?
- 27. Firebaseを最も効率的に照会する方法iOS
- 28. iOSアドレス帳を効率的に検索する方法
- 29. iOSでHealthKitのHKSampleQuery結果を効率的に解析する
- 30. iOSで画像を効率的に使用する方法
は 'NSFetchedResultsControllerを再作成するよりも効率的、このです'フェッチを実行するための新しい呼び出しが毎回与えられていることを考えれば、 –
少なくとも、NSFetchedResultsControllerを作成して破棄するオーバーヘッドはありません。だから、私はそれがどれくらい効率的であるかの指標を持っていませんが、それはすべきです。 –
ありがとうございます。私は試してみましょうが、実際にこれを修正するために、非同期コードをいくつか追加して(そしてフェッチを遅らせる)必要があるようです。 –