Похоже, что-то не так с этим в сети, мне нужно запустить запрос на выборку, упорядоченный по расстоянию от текущего местоположения пользователя.Мой первый план состоял в том, чтобы создать временное свойство ...
- (CLLocationDistance)distance {
return [self.location distanceFromLocation:locationManager.location];
}
Но потом я обнаружил, что базовые данные не будут выбираться на основе переходного свойства, что, как я думал, может иметь место при включении выборки.в оператор SELECT с предложением ORDER BY, поэтому мое свойство distance должно существовать в базе данных.
Хорошо, поэтому моя вторая идея заключалась в том, чтобы добиться этого так же, как в другом проекте, в котором использовался SQLite без Core Date с использованиемпользовательская функция sqlite, созданная с помощью sqlite3_create_function ...
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])]]);
}
}
Теперь вопрос, как бы я вызвал эту функцию из основного запроса на выборку данных?Я предполагаю, что это, вероятно, невозможно, так как основная цель данных состоит в том, чтобы абстрагироваться от деталей резервного хранилища, но, возможно, кто-то знает другое?