如何比较Objective-C

时间:2015-05-01 17:12:25

标签: ios objective-c

我正在开发一款使用GPS位置的应用。知道位置我得到纬度和经度。

我没有定期获得位置,但我想知道用户是否已经移动。为此,我存储了最后的位置和当前位置(纬度和经度)

我这样做:

if (latitudNew != latitudOld && longitudNew != longitudNew)
{
    float R = 6378.137;
    double dLat = ((latitudNew - latitudOld) * M_PI) / 180;
    double dLong = ((longitudNew - longitudOld) * M_PI) / 180;

    double a  = sin(dLat/2) * sin(dLat/2) + cos((latitudOld*M_PI)/180) * cos((latitudNew*M_PI)/180) * sin(dLong/2) * sin(dLong/2);
    double c = 2 * atan2(sqrt(a), sqrt(1-a));
    double d = R * c;
}

距离存储在d。

我的问题是它永远不会超过if条件,所以我知道我没有正确比较它。

我不能使用this solution,因为我可以有负数(一个或两个或没有)。

任何想法??

3 个答案:

答案 0 :(得分:3)

比较双打并不是一个好主意。您需要做的是减去这两个值,然后检查两者之间的差异是否大于您需要定义的阈值,如0.0001。

答案 1 :(得分:3)

你有这条线:

    ERROR 1442: 1442: Can't update table 'user_has_academy_module' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
SQL Statement:
UPDATE `system`.`user_has_academy_module` SET `is_complete`='1' WHERE `user_id`='1' and`module_id`='11' and`academy_team_id`='49' and`academy_id`='29'

这是if (latitudNew != latitudOld && longitudNew != longitudNew) 。你有一个拼写错误,你正在测试变量是否与自身不相等。它总是假的。你的意思是为其中一个放longitudNew != longitudNew。虽然您可能希望将longitudOld替换为&&,但是如果这些条件中的任何一个为真,您希望在if块中执行代码。

此外,这有点不合适......正确的拼写是经度和纬度。你离开了两个人。

答案 2 :(得分:2)

这看起来对我来说是正确的,你可以像在C中那样比较Objective-C中的double。你从中获取信息的数据源可能会使值四舍五入,使它们看起来相等或者数据不经常更新。

此外,您可能希望更改逻辑,使||中的if代替&&。你仍然认为位置更新是一个更新,即使它只是在两个中的一个。