Можно ли использовать пользовательскую функцию sqlite в основных данных?

Похоже, что в этом нет ничего об этом, мне нужно запустить запрос выборки, упорядоченный по расстоянию от текущего местоположения пользователей. Мой первый план заключался в создании переходного свойства …

- (CLLocationDistance)distance { return [self.location distanceFromLocation:locationManager.location]; } 

Но потом я обнаружил, что основные данные не будут извлекаться на основе свойства переходного процесса, которое, как я думал, может быть так, поскольку выборка превращается в инструкцию SELECT с предложением ORDER BY, поэтому мое свойство расстояния должно существовать в базе данных.

Итак, моя вторая идея заключалась в том, чтобы добиться этого так же, как и в другом проекте, который использовал 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])]]); } 

}

Теперь вопрос заключается в том, как я могу назвать эту функцию из основного запроса выборки данных? Я предполагаю, что он, вероятно, невозможен, поскольку основная задача данных состоит в том, чтобы абстрагироваться от деталей резервного хранилища, но, может быть, кто-то знает разные?

3 Solutions collect form web for “Можно ли использовать пользовательскую функцию sqlite в основных данных?”

Вы правы, это невозможно с использованием Core Data. Не забывайте, что возможны другие типы хранилищ. Как выполнить этот запрос против XML?

Если вам просто нужно отсортировать результаты, почему бы не установить дескриптор сортировки в массиве после выполнения выборки (при условии, что набор данных не слишком велик)?

Я собираюсь предложить пойти по другому пути.

Кажется, из вашей пользовательской функции вы выполняете какую-то работу с ГИС. Я просто сделал быстрый google и увидел, что для sqlite есть расширение GIS: Gaia-SINS

Я думаю, вам будет лучше сворачивать вашу собственную библиотеку sqlite и добавить расширение, такое как это, используя вычисления GIS других народов. Зачем откатывать свои собственные ГИС-уравнения, когда другие люди сделали это за вас?

В качестве отправной точки см. Другие вопросы SO, такие как: compiling-custom-sqlite-for-a-iphone-app

Невозможно вызвать свойство переходного процесса в запросе выборки. Я работаю над той же проблемой много дней после того, как нашел обходной путь. Я вычисляю расстояние каждого элемента и выбираю n предметов первого интереса. следующий метод принимает результат множественного поиска в NSFetchedResultsController и возвращает число p_NumberArroundMe.

 -(void) filteredCustomerPortfolioArroundMe:(NSInteger)p_NumberArroundMe for:(NSFetchedResultsController*)p_FetchedResultsController { NSFetchRequest *allEtabfetchRequest = [[NSManagedObjectModel CRMManagedObjectModel] fetchRequestFromTemplateWithName:@"AllEtablissements" substitutionVariables:nil]; NSArray *allEtabInDatabase = [[NSManagedObjectContext sharedManagedObjectContext] executeFetchRequest:allEtabfetchRequest error:nil]; NSArray *sortedList = [allEtabInDatabase sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"distanceFromUser" ascending:YES]]]; if ([sortedList count] > p_NumberArroundMe) { NSRange aRange; aRange.location = 0; aRange.length = p_NumberArroundMe; sortedList = [sortedList subarrayWithRange:aRange]; } NSMutableArray* keyList = [NSMutableArray array]; for (SPIREtablissementMin* item in sortedList) { [keyList addObject:item.partner]; } NSPredicate *predicateArroundMe = [NSPredicate predicateWithFormat:@"partner IN %@",keyList]; [p_FetchedResultsController.fetchRequest setPredicate:predicateArroundMe]; [self performFetch:p_FetchedResultsController]; } 
  • Как я могу получить доступ к моей собственной базе данных приложений iOS друг от друга
  • Основные данные Чрезмерная VM: кеш-страница SQLite
  • изменить формат даты в sqlite
  • Синхронизация фона в iOS7
  • iOS SQLite Sum и получение данных
  • Обновление / Вставка содержимого в существующую базу данных Sqlite для обновления приложения iPhone
  • Sqlite случайным образом замедляется на простой (но большой) таблице на iOS
  • Как добавить уникальное ограничение в уже созданную таблицу в sqlite ios?
  • Как отображать данные из SQlite в представления таблиц в приложение iPhone
  • iOS - SQLite не обновляется, но подготовка и шаг успешно выполняются
  • Возможное отклонение приложения, синхронизируя базу данных sqlite zip в iOS
  • NSFileCoordinator правильное использование для файла журнала sqlite в песочнице Приложение Mac App Store
  • Interesting Posts

    Неправильное размещение текстового поля поиска внутри строки поиска на iOS 11

    Получить текущее использование памяти WKWebView?

    создать новую группу с картой контактов, CNErrorDomain Code = 2

    Как разбирать JSON, когда нет ключа, но только целое число / значение строки?

    iOS Создать уникальный идентификатор для изображений

    Можно ли обнаружить музыку не-ipod?

    UIButton не доступен для кликов за пределами исходного кадра UIScrollView

    Добавьте кнопку «Готово», чтобы отклонить программно созданный UIViewController

    Swift – Shrink Navigation Bar на прокрутке

    Регулярное регулярное выражение c-предложения

    Получите длинное значение из NSString

    Действительно ли необходим BridgeToObjectiveC?

    iOS 11 – Высота клавиатуры возвращается 0 в уведомлении клавиатуры

    iOS: сбой initWithCoder: «Управлять классом для реализации селектора нужно нажать»

    Высота автокоррекции клавиатуры (с / без автокоррекции)

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.