1

Core Data を使用して一部のデータを取得しています。この SQL ステートメントのようなものを Core Data ステートメントに変換するにはどうすればよいですか?

SELECT bus, direction from BUSES where latitude > 58.00 and longitude < 34.00 group by bus, direction

言い換えれば、私は BUS と DIRECTION でグループ化するのが好きですが、WHERE 節があります。

私はこのコードを使用してみました:

request.propertiesToFetch = [NSArray arrayWithObjects:@"bus", @"direction", nil];
request.returnsDistinctResults = YES;
request.resultType = NSDictionaryResultType;

問題は、バスと方向のみを取得すると、次のように緯度と経度で NSPredicate を設定できないことです。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(lat > 58) AND (lat < 34)"];
[fetchRequest setPredicate:predicate];

Core Data はバスと方向のみを取得していると思います。それが NSPredicate が機能していない理由です。

4

1 に答える 1

1

コア データは SQL ではありません。実際、永続ストアに SQLite を使用する必要さえありません。

解決しようとしている問題について、SQL でどのように解決するかを考えるのではなく、モデルで定義したエンティティと関係の観点から考えることを常にお勧めします。

通常のフェッチ リクエスト (propertiesToFetch を指定しない) を使用して必要なオブジェクトを取得し、それらを自分でグループ化することをお勧めします。

1 つの属性のみに関心がある場合はvalueForKey:、完全なオブジェクトの配列で使用して、それらの値だけの配列をすばやく取得できます。例えば:

NSArray *busses = [objects valueForKey:@"bus"];
于 2012-05-30T03:48:12.483 に答える