startMonitoringForRegion并不总是向monitoredRegions添加区域

时间:2010-10-27 01:24:00

标签: iphone core-location

我无法让startMonitoringForRegion一直添加区域。

        int i =0;
        for(Deals *d in  deals){
            NSLog(@"deal addRegionsInDealsArray %@",d.deal_id);
            if (d.latitude != NULL && d.longitude!=NULL && 
                ![d.latitude isEqualToNumber:[NSNumber numberWithInt:0 ]] && 
                ![d.longitude isEqualToNumber:[NSNumber numberWithInt:0 ]]) {

                CLLocationCoordinate2D dl = CLLocationCoordinate2DMake(
                [d.latitude doubleValue],
                [d.longitude doubleValue]);
                //NSLog(@"Lat addRegionsInDealsArray %@",d.latitude);

                CLRegion * clr = [[CLRegion alloc] initCircularRegionWithCenter:dl radius:radius identifier:d.deal_id];

                [locationManager startMonitoringForRegion:clr desiredAccuracy:kCLLocationAccuracyHundredMeters];
                NSLog(@"Region to add:%@",clr);
                [clr release];
                i++;
                if (i==10) {
                    break;
                }
            }
        }

我把休息时间放在10以后因为它从未增加超过10并且会在560个地区附近崩溃。甚至将它限制为10个regins它有时不会增加10但只增加8(或7,9或0)。它不是第8个被添加的。

如果我有

NSLog(@"region count %i",[[locationManager monitoredRegions] count]);

在厕所之后它总是产生错误

ERROR,Time,309834541.397,Function,“Boolean CLClientCopyMonitoredRegions(__ CLClient *,const __CFDictionary **)”,无法成功发送

有关如何成功使用startMonitoringForRegion的任何建议吗?

编辑:在startMonitoringForRegion:和[[locationManager monitoredRegions] count]周围添加@try catch,产生错误。他们的错误仍然产生但没有被抓住。也将它全部移动到NSTimer循环,每秒触发它可以重复调用导致问题。仍然随机失败。 有时我的第一次通话失败。

干杯

3 个答案:

答案 0 :(得分:4)

在位置感知编程指南

  

在指定要监控的区域集时,您应始终谨慎。区域是共享系统资源,系统范围内可用区域的总数是有限的。因此,Core Location限制了单个应用程序可以同时监视的区域数量。

答案 1 :(得分:0)

您使用iPhone4功能仅适用于该设备,请查看

 [CLLocationManager regionMonitoringAvailable] 

答案 2 :(得分:0)

这似乎是数据库错误或类似的东西。在注册区域之后的一段时间内,桌子被锁定(或者,无论等同于幕后,但是我猜它正是这样)。因此你不能算数。在较长时间后尝试计数。