【问题标题】:Implementing a Haversine function for sqlite into an iPhone project将 SQLite 的 Haversine 函数实现到 iPhone 项目中
【发布时间】:2011-08-04 20:24:05
【问题描述】:

所以经过一个小时的研究,我发现大多数人似乎都同意http://www.thismuchiknow.co.uk/?p=71 的函数是在 iPhone 项目中实现 Haversine 函数的方法,以便在您有充满经纬度的数据库。不过,如何将它实际包含在您的项目中似乎没有什么帮助,而且我自己也没有运气。

无论我将函数添加到 ViewController.m 文件的哪个位置,都会收到错误 expected ')' before '*' token。有人提到您需要将 static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **argv); 放入您的 .h 文件中,但我也遇到了同样的错误。

谁能提供一个在 iPhone 项目中包含此功能的简短示例?

【问题讨论】:

    标签: iphone objective-c xcode sqlite haversine


    【解决方案1】:

    你可以用这个,

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

    或将 viewController 文件的 .m 扩展名更改为 .mm。(您也可以试试这个)

    更新

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

    尝试更新一个。

    谢谢,

    【讨论】:

    • 可悲的是,如果我把它放到头文件中,我会得到 error: expected ';' before '(' token,如果我用它来替换我的 .m 文件中的 static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **argv) 行来替换函数本身(起飞后当然,最后是;),我得到error: expected '{' before '(' token
    • 如果我这样做,我会收到与符号 _sqlite3_value_type_sqlite3_reset_null_sqlite3_value_double_sqlite3_result_double 相关的构建错误。
    • 您是否在应用程序中添加了 sqlite 框架。你是在导入它的头文件吗?
    • 您还尝试过更改文件扩展名的另一件事吗?从.m 到.mm?有效吗?
    • -1 sqlite3 不知道什么是 Objective-C 方法。您无法将其作为 sqlite3 自定义函数传递。
    【解决方案2】:

    将代码插入您在.m 文件的任何位置提供的链接中应该没有问题。如果您在函数定义行收到错误,则编译器可能不知道sqlite3_context 是什么。这意味着您的 .m 文件中没有包含 sqlite3.h 标头。

    【讨论】:

    • 问题在于我没有将libsqlite3.dylib 框架添加到项目中。
    【解决方案3】:

    好的,所以我的问题是没有使用#import <sqlite3.h> 和没有将libsqlite3.0.dylib 框架添加到我的项目中。至于将 http://www.thismuchiknow.co.uk/?p=71 中的函数放在哪里,我将它放在我的 #import 标签和控制器的 @synthesize 文件之间,就像它在博客文章中一样。

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      • 2014-06-21
      相关资源
      最近更新 更多