我使用此方法从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循环的任何给定运行中数组中没有两个对象,它就能完美地工作。当有两个(或更多)应用程序在播放一次振动后崩溃。
我猜它是因为它试图在另一个声音/哔哔声之上发出声音/嘟嘟声,但我不确定。
任何人都有一个简单的解决方案吗?
谢谢!
答案 0 :(得分:1)
同意LuisCien的说法,从崩溃中发布调试器的内容会有所帮助。
一个(盲)建议虽然是在循环的每次迭代期间推迟从taggedObjectsArray
删除每个对象,并且在快速枚举完成后只需调用[taggedObjectsArray removeAllObjects];
< / p>
从纯粹的效率和可读性的角度来看,使用一种设计用于删除所有内容的库存方法执行此操作比执行一次删除p次更简洁,因为两者最终都是相同的(一个空的NSMutableArray)
有可能(推测)它可能会解决你的崩溃,但发布崩溃日志将有助于更好地决定。