更新: iOS5.1 でのこの問題の回避策を探しています。現在、この問題が実際に知られているという証拠があります。ただし、iOS5.1で実際に領域監視が機能しないというよりは、更新されたxcodeに関連していると思います。
以下の単純なコードは、iOS5 と iOS6 で動作が異なります。iOS6では期待通りに動作します。
しかし、iOS5 では、didEnterRegion コールバックは、最初に領域に入ったときにのみトリガーされます。リージョンを出て、リージョンに再び入ると、トリガーされません。アプリを閉じて再起動すると、リージョンに入ってもコールバックはトリガーされません。
動作の違いは、iOS5 および iOS6 シミュレーターで見られました。iOS5 の壊れた動作は、iOS5 を搭載した iPhone 4S で見られました。Xcode 4.6 を使用しました。CoreLocation フレームワークは適切に追加され、locMan は AppDelegate のプロパティです。このテスト用に、クリーンな新しいプロジェクトが作成されました。
誰かがこの問題の回避策を見つけてもらえますか? この修正では、アクティブな位置情報の更新ではなく、地域の監視を使用する必要があります。
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, CLLocationManagerDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, strong) CLLocationManager *locMan;
@end
// AppDelegate implementation file
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
/// LocationManager
self.locMan = [[CLLocationManager alloc] init];
self.locMan.delegate = self;
CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(40.0, 40.0);
CLLocationDistance distance = 100.0;
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:distance identifier:@"hello"];
[self.locMan startMonitoringForRegion:region];
[self.window makeKeyAndVisible];
return YES;
}
-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"didEnterRegion");
}