我有一组点,我想运行一个计算,用户可以点击一个按钮并将其路由到最接近它们的集合中的点。计算正常。
我现在的问题是,我希望只有当设备的位置精确度足以为路由提供良好的起点时 - 例如,精确度低于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}}),但从未出现在日志中。
我的猜测是,它会在任何位置更新发生之前进入循环,然后它会卡在那里并且无法获得任何进一步的位置信息。我可以采取哪些更好的替代方案来使这项工作顺利进行?
答案 0 :(得分:0)
发生的事情是位置更新在主运行循环中返回,并且您使用while循环阻止主运行循环。
你可以把这个逻辑放在另一个线程上,但我不建议。
我建议在其中放置一个带有UIActivityIndicatorView的警报,并等待您收到具有所需准确度的位置更新。