#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
файл моего контроллера, который отображается точно так же, как и в сообщении в блоге.