Внедрение функции Haversine для sqlite в проект iPhone

#iphone #objective-c #xcode #sqlite #haversine

#iPhone #objective-c #xcode #sqlite #haversine

Вопрос:

Итак, после часа исследований я обнаружил, что большинство людей, похоже, согласны с тем, что функция в http://www.thismuchiknow.co.uk/?p=71 это способ внедрения функции Haversine в проект iPhone для упорядочивания результатов по расстоянию, когда у вас есть база данных, полная широт и долгот. Похоже, мало что помогает в том, как на самом деле включить ее в ваш проект, и мне самому не везет.

Независимо от того, где я добавляю функцию в свой файл ViewController.m, я получаю ошибку expected ')' before '*' token . Некоторые люди упоминали, что вам нужно поместить static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **argv); в свой файл .h, но и там я получаю ту же ошибку.

Кто-нибудь может привести краткий пример включения этой функции в проект iPhone?

Ответ №1:

вы можете использовать это,

  (void)distanceFunc(sqlite3_context *context, int argc, sqlite3_value **argv);
  

или измените расширение .m вашего файла ViewController на .mm. (Вы также можете попробовать это)

обновлено

  (void)distanceFunc:(sqlite3_context *)context arg1:(int)argc arg2:(sqlite3_value **)argv;
  

попробуйте обновленный вариант.

Спасибо,

Комментарии:

1. К сожалению, если я помещу это в файл заголовка, я получу error: expected ';' before '(' token , и если я использую это для замены static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **argv) строки в моем файле .m для самой функции (после удаления ; в конце, конечно), я получу error: expected '{' before '(' token .

2. Если я это сделаю, я получу эти ошибки сборки, связанные с символами _sqlite3_value_type , _sqlite3_reset_null , _sqlite3_value_double и _sqlite3_result_double .

3. вы добавили sqlite framework в свое приложение. импортируете ли вы его заголовочный файл?

4. вы пробовали еще что-нибудь изменить с расширением вашего файла? от .m до .mm? работает ли это?

5. -1 sqlite3 не знает, что такое метод Objective-C. Вы никак не могли бы передать ее как пользовательскую функцию sqlite3.

Ответ №2:

Не должно возникнуть проблем с вставкой кода по ссылке, которую вы указали, в любом месте .m файла. Если вы получаете ошибку в строке определения функции, вполне вероятно, что компилятор не знает, что такое sqlite3_context . Это означает, что вы не включили sqlite3.h заголовок в свой файл .m.

Комментарии:

1. Проблема заключалась в том, что я не добавил libsqlite3.dylib фреймворк в проект.

Ответ №3:

Хорошо, итак, моя проблема заключалась в том, что я не использовал #import <sqlite3.h> и не добавлял libsqlite3.0.dylib фреймворк в свой проект. Что касается того, откуда размещать функцию http://www.thismuchiknow.co.uk/?p=71 Я поместил ее между своими #import тегами и @synthesize в .m файл моего контроллера, который отображается точно так же, как и в сообщении в блоге.