0

更新: 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");
}
4

1 に答える 1

0

この質問を 1 週間放置した後、iOS5.1 でリージョン モニタリングが壊れているという十分な証拠が得られたと感じています。質問を締めくくる時間です。

于 2013-02-20T21:14:26.707 に答える