0

NSDateeventStartとeventEndの2つの列を持つテーブルのsqliteバックエンドを持つcoreDataがあります。かなり複雑な選択と並べ替えを実行したいと思います。

アプリケーションのメインディスプレイの1つについて、次の2つを取得したいと思います。

  1. 期間(eventEnd-eventStart)が指定された値よりも小さかった10個のイベント
  2. 期間が指定された値よりも大きかった10のイベント
  3. イベントは、指定された値からの距離に基づいて正しくソートする必要があります

私がすぐに直面した2つの問題は、式から列を選択する方法が見つからないことです(日付の計算)。2つ目はNSSortDescriptor、式ではなく、列でのみ機能するようです。これはSQLiteの動作とは逆であり、生のSQLを分解する方が簡単かどうか疑問に思っています。

特に、並べ替えは式上にあるため、クエリは並べ替えのためにすべてのデータを返す必要があるため、操作するデータは大きすぎて並べ替えなどのメモリに収まりません。

4

2 に答える 2

1

最初にオブジェクトをフェッチすると、前述の間隔を返すメソッドなど、必要なキーを使用して結果をメモリ内で並べ替えることができるはずです。したがって、この時間間隔を返すメソッド名を使用してNSSortDescriptorを作成し、それを使用して新しい配列を作成してから、単に呼び出します。

[originalFetchedArray sortedArrayUsingDescriptors:sortDescriptors];

これにより、ソートされた新しい配列が返されます。NSMutableArrayから始めている場合は、同様の方法を使用してその場で並べ替えることができます。

于 2012-12-27T19:26:09.970 に答える
0

非常によく似た問題が発生したとき、計算値の新しい列を作成しました(あなたの場合は期間になります)。その後、検索は簡単になります。

于 2012-12-27T17:55:08.363 に答える