对SQLite语句的Equal Core Data语句(按... desc ...排序)

时间:2014-02-07 17:33:59

标签: ios objective-c sqlite core-data

我在sqlite中使用一个语句从表中选择特定对象:

 NSString *statment = [NSString stringWithFormat:@"SELECT * FROM %@ ORDER BY %@ DESC LIMIT 1", TRAP_TABLE, DISTANCE_TO_CLOSE_POINT];

我想使用核心数据做同样的事情。 我应该如何混合NSPredicate& NSSortDescriptor为了做同样的事情?

编辑: 这就是我的所作所为,尚未尝试过:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:DISTANCE_TO_CLOSE_POINT ascending:NO selector:@selector(localizedCompare:)];

1 个答案:

答案 0 :(得分:1)

NSPredicate类似于SQL语句的where子句。您的示例没有where子句。

NSFetchRequest中,您可以添加排序描述符来处理'order by'。同样在NSFetchRequest中,您可以设置提取限制。

从那里,您将NSFetchRequest传递给NSManagedObjectContext并收到您的结果。

更新1

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:DISTANCE_TO_CLOSE_POINT ascending:NO selector:@selector(localizedCompare:)];

在这种情况下,这太过分了。我猜你正在排序的值是一个数字,这意味着你不需要localizedCompare:,因为你没有使用字符串。所以你可以简化它:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:DISTANCE_TO_CLOSE_POINT ascending:NO];

如果您在ARC项目中,甚至将其降低到:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:DISTANCE_TO_CLOSE_POINT ascending:NO];

然后可以将其直接投入NSFetchRequest

[fetchRequest setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:DISTANCE_TO_CLOSE_POINT ascending:NO]]];