iOS 7 确实没有被调用



我正在使用以下代码来监视我的iOS应用程序中的区域。当我在 iOS6 上构建应用程序时,它可以完美运行。当我在iOS7上构建它时,didEnterRegion没有被触发。

使用 iOS 创建并注册区域

CLLocationCoordinate2D venueCenter = CLLocationCoordinate2DMake([favoriteVenue.venueLat      doubleValue], [favoriteVenue.venueLng doubleValue]);
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:venueCenter radius:REGION_RADIUS identifier:favoriteVenue.venueId];
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[appDelegate.locationManager startMonitoringForRegion:[self regionForVenue:favoriteVenue]];

在 AppDelegate.m 中

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
    NSLog(@"Entered region: %@", region.identifier);
}

我还在我的 plist 文件中将所需的后台模式设置为"位置更新的应用程序注册"。

关于此功能在 iOS7 上运行缺少什么的任何想法?

谢谢!

应该

适用于iOS 6和iOS 7的事情是在类中创建一个符合CLLocationManagerDelegate协议的公共方法,该协议告诉自己开始监视该区域。 例如:

//LocationManagerClass.h
@interface LocationManagerClass : NSObject
      {... other stuff in the interface file}
- (void)beginMonitoringRegion:(CLRegion *)region;
@end

然后在

//LocationManagerClass.m
@interface LocationManagerClass () <CLLocationManagerDelegate>
@end
@implementation LocationManagerClass
     {... other important stuff like locationManager:didEnterRegion:}
- (void)beginMonitoringRegion:(CLRegion *)region
{
    [[CLLocationManager sharedManager] startMonitoringForRegion:region];
}
@end

所以在你的情况下,你会打电话给[appDelegate beginMonitoringRegion:region];

附带说明一下,我建议不要将您的位置管理代码放在应用程序委托中。 虽然从技术上讲它可以工作,但对于这样的事情来说,它通常不是一个好的设计模式。 相反,就像上面的例子一样,我会尝试将其放在它自己的位置管理器类中,这可能是一个单例。 这篇博文提供了一些很好的支持,说明为什么不在应用程序委托中放置大量内容:http://www.hollance.com/2012/02/dont-abuse-the-app-delegate/

相关内容

  • 没有找到相关文章

最新更新