Ios 等待时陷入循环

Ios 等待时陷入循环,ios,objective-c,core-location,Ios,Objective C,Core Location,我有一组点,我想运行一个计算,用户可以点击一个按钮,并被路由到集合中离他们最近的点。计算结果正确 我现在的问题是,我希望进行计算的按钮只在设备的定位精度足够好,可以为路由提供一个良好的起点时显示,比如说,在75米的精度以下。然而,当我试图检查准确性时,我总是陷入一个无限循环中,并且没有找到任何好的替代方法来代替我正在尝试的方法 这是我的相关代码(我已经尝试了while{}和do{}while循环) do{ NSLog(@“%f”,当前位置。水平精度); 如果(currentLocation.Ho

我有一组点,我想运行一个计算,用户可以点击一个按钮,并被路由到集合中离他们最近的点。计算结果正确

我现在的问题是,我希望进行计算的按钮只在设备的定位精度足够好,可以为路由提供一个良好的起点时显示,比如说,在75米的精度以下。然而,当我试图检查准确性时,我总是陷入一个无限循环中,并且没有找到任何好的替代方法来代替我正在尝试的方法

这是我的相关代码(我已经尝试了while{}和do{}while循环)

do{
NSLog(@“%f”,当前位置。水平精度);
如果(currentLocation.HorizontalAccurance<75&¤tLocation.HorizontalAccurance!=0)
{
NSLog(@“准确度很好!”);
calcDistance.hidden=false;
打破
}
其他的
持续
}而(currentLocation.HorizontalAccurance>75 | | currentLocation.HorizontalAccurance==0);
当我在一台设备上运行应用程序时,发生的所有情况都是完全挂起,在模拟器中,日志只是不断重复0.0000的精度-我的locationManager中有一条NSLog语句,它应该发布当前位置信息(
NSLog(@“%@”,currentLocation);
),但它永远不会显示在日志中


我的猜测是,它在任何位置更新发生之前就进入了循环,然后它被卡在那里,无法获得任何进一步的位置信息。对于这些循环,我可以采取哪些更好的替代方案使其顺利运行?

发生的情况是,位置更新返回到主运行循环,而您正在用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);
你可以把这个逻辑放在另一条线上,但我不建议这样做


我建议在警报中加入UIActivityIndicator视图,并等待收到准确的位置更新。

只需输入此代码(循环中的内容,而不是循环本身)在您的'locationManager:didUpdateLocation:方法中。在循环中执行此操作将花费100%的CPU时间,并在尽可能短的时间内清空设备的电池。这就是为什么你需要遵循ahruss的建议,并且只有当位置经理告诉你事情发生了变化时才去做。太棒了。我没有想到在location manager中运行该代码。从我的角度来看,这对我来说完全有意义。谢谢你们两个!太棒了-我不知道UIActivityIndicator的东西。我一定会把它加到我的阅读中。我对这个很陌生,有些基本的东西我还是不知道。非常感谢!阿鲁斯上面的信息看起来像是按照我想要的方式工作,但我会继续玩下去,看看什么效果最好。