1

我使用此方法从 locationManager 获取位置更新:

 - (void) locationManager:(CLLocationManager *) manager
 didUpdateLocations:(NSArray *)locations
{
    for (CLLocation *p in taggedObjectsArray) {
         CLLocationDistance distance = [p  distanceFromLocation: newLocation];
         if(distance < 10.00){
             AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
             // if warning setting is set to sound, play sound
             if (beep) {
                 AudioServicesPlaySystemSound(beep);
             }
             [taggedObjectsArray removeObject:p];;
         }
    }

taggedObjectsArray 包含指向 Cllocation 对象的指针

现在,只要在通过 for 循环的任何给定运行中数组中没有两个对象,它就可以完美地工作。当有两个(或更多)应用程序在播放一次振动后崩溃。

我猜它是因为它试图在另一个声音/哔声之上播放声音/哔声,但我不确定。

有人对此有简单的解决方案吗?

谢谢!

4

1 回答 1

1

同意 LuisCien 的观点,即从崩溃中发布调试器的内容会很有帮助。

一个(盲目的)建议是在循环的每次迭代期间推迟删除每个对象,taggedObjectsArray并在快速枚举完成后执行一次调用[taggedObjectsArray removeAllObjects];

从纯粹的效率和可读性的角度来看,使用旨在删除所有内容的库存方法执行一次比调用单个删除 p 次更干净,因为两者最终得到相同的东西(一个空的 NSMutableArray)

有可能(推测)它也可以解决您的崩溃问题,但发布崩溃日志将有助于更好地做出决定。

于 2013-10-24T20:37:34.893 回答