【发布时间】:2012-03-23 23:02:52
【问题描述】:
似乎与此在线无关,我需要运行按与用户当前位置的距离排序的 fetch 查询。我的第一个计划是创建一个临时属性...
- (CLLocationDistance)distance {
return [self.location distanceFromLocation:locationManager.location];
}
但后来我发现核心数据不会基于瞬态属性获取,我认为可能是这种情况,因为获取变成了带有 ORDER BY 子句的 SELECT 语句,所以我的距离属性需要存在于数据库。
好的,所以我的第二个想法是使用使用 sqlite3_create_function 创建的自定义 sqlite 函数来实现这一点,就像我在另一个使用 SQLite 而没有 Core Date 的项目中所做的那样......
static void sqliteDistance(sqlite3_context *context, int argc, sqlite3_value **argv) {
if(sqlite3_value_type(argv[0])==SQLITE_NULL || sqlite3_value_type(argv[1])==SQLITE_NULL) {
sqlite3_result_null(context);
} else {
sqlite3_result_double(context, [locationManager.location distanceFromLocation
[[CLLocation alloc] initWithLatitude: sqlite3_value_double(argv[0]) longitude: sqlite3_value_double(argv[1])]]);
}
}
现在的问题是如何从核心数据获取查询中调用此函数?我猜这可能是不可能的,因为核心数据的目的是抽象出后备存储的细节,但也许有人知道不同?
【问题讨论】:
-
您的问题是“您能否将自定义 SQLite 函数与 Core Data NSSQLiteStoreType 一起使用”。那将是一个不。您尝试完成的任务是按与已知位置的距离对 Core Data 结果进行排序,这很有可能,但将是一个不同的问题。
-
@quellish 是对的。为什么不使用没有核心数据的 SQLite,顺便说一句?
标签: objective-c ios sqlite core-data