1

我正在使用核心数据来检索一些数据。我怎样才能将这样的 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];

我猜核心数据只是检索总线和方向,这就是 NSPredicate 不起作用的原因。

4

1 回答 1

1

核心数据不是 SQL。事实上,它甚至不必将 SQLite 用于其持久存储。

我总是建议您根据您在模型中定义的实体和关系来考虑您要解决的问题(而不是考虑如何在 SQL 中解决问题)。

我建议使用带有谓词的普通获取请求(不要指定 propertiesToFetch)来获取您想要的对象,然后自己对它们进行分组。

如果您只对一个属性感兴趣,则可以使用valueForKey:完整对象数组来快速获取仅包含这些值的数组。例如:

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