等待时陷入困境

时间:2014-07-27 15:46:41

标签: ios objective-c core-location

我有一组点,我想运行一个计算,用户可以点击一个按钮并将其路由到最接近它们的集合中的点。计算正常。

我现在的问题是,我希望只有当设备的位置精确度足以为路由提供良好的起点时 - 例如,精确度低于75米,才能显示执行计算的按钮。然而,当我试图检查准确性时,我一直陷入无限循环中,并且没有找到任何替代我正在尝试做的事情。

这是我的相关代码(我已尝试将其作为while {}和while {} while while循环。)

        do {
        NSLog(@"%f", currentLocation.horizontalAccuracy);
        if (currentLocation.horizontalAccuracy < 75 && currentLocation.horizontalAccuracy != 0)
        {
            NSLog(@"Accuracy is good!");
            calcDistance.hidden = false;
            break;
        }
        else
            continue;
    } while (currentLocation.horizontalAccuracy > 75 || currentLocation.horizontalAccuracy == 0);

当我在设备上运行应用程序时发生的所有事情都是完全挂起,并且在模拟器中日志只是不断重复0.0000的精度 - 我的locationManager中有一个NSLog语句应该发布当前位置信息({ {1}}),但从未出现在日志中。

我的猜测是,它会在任何位置更新发生之前进入循环,然后它会卡在那里并且无法获得任何进一步的位置信息。我可以采取哪些更好的替代方案来使这项工作顺利进行?

1 个答案:

答案 0 :(得分:0)

发生的事情是位置更新在主运行循环中返回,并且您使用while循环阻止主运行循环。

你可以把这个逻辑放在另一个线程上,但我不建议。

我建议在其中放置一个带有UIActivityIndi​​catorView的警报,并等待您收到具有所需准确度的位置更新。