我在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:)];
答案 0 :(得分:1)
NSPredicate
类似于SQL语句的where子句。您的示例没有where子句。
在NSFetchRequest
中,您可以添加排序描述符来处理'order by'。同样在NSFetchRequest
中,您可以设置提取限制。
从那里,您将NSFetchRequest
传递给NSManagedObjectContext
并收到您的结果。
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]]];