4

私はこれに関する問題を見つけるのにうんざりしていますが、ロケーションマネージャーのデリゲートメソッドが呼び出されない、didEnterRegionまたはdidExitRegion呼び出されないためになぜこれが起こるのかを理解できませんでした。iPhoneでこれをテストしましたが、うまくいきません。私が欠けているものを教えてください。私のソースコードは次のとおりです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] 境界]] autorelease];
    // アプリケーションの起動後にカスタマイズするポイントをオーバーライドします。
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    manager = [[CLLocationManager alloc] init];
    manager.delegate = 自己;
    距離 = 100;
    coord = CLLocationCoordinate2DMake(24.004686, 74.554088);
    region=[[CLRegion alloc] initCircularRegionWithCenter:coord radius:dist identifier:@"emanuele"];
    [manager startMonitoringForRegion:region desiredAccuracy:10];
    はいを返します。
}

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{
    NSLog(@"地域を入力してください。");
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"わかりました..." message:@"場所を入力しました。" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [アラートショー];
// [アラート解除];
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
    NSLog(@"didExitRegion");
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"わかった..." message:@"ロケーションを終了しました。" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [アラートショー];
// [アラート解除];
}

誰が何が悪いのか理解できますか?? 私は多くのデモとソースコードを検索しましたが、それらのほとんどはdidUpdateToLocation私の場合は で終わりますが、 と に問題がdidEnterありdidExitます。私も実装しましたdidFailWithErrorが、それはしません。これら 2 つのメソッドが呼び出されない理由を教えてください。または、これらのメソッドを呼び出すリンクを教えてください。これらのメソッドの例/ソースは見つかりませんでした。どんな助けでも大歓迎です。

4

4 に答える 4

1

ヘッダー ファイルは CLLocationManagerDelegate として宣言されていますか?

監視用の領域を設定したら、コードのその要素を削除してテストし、次のように起動するときに UIApplicationLaunchOptionsLocationKey キーを確認する必要があります。

 if ([launchOptions objectForKey:@"UIApplicationLaunchOptionsLocationKey"]){

        NSLog(@"UIApplicationLaunchOptionsLocationKey - fired");
        if(locman == nil){
            locman = [[CLLocationManager alloc]init];


        locman.delegate = self;
        locman.distanceFilter = kCLLocationAccuracyBest;
        }

    }

その後、ロケーション マネージャー デリゲートが呼び出され、didEnter と didExit が正常に起動します。

于 2012-07-21T13:14:00.413 に答える
0

一般設定でアプリのバックグラウンド更新を有効にした後でのみ、didEnterRegion と didExitRegion を取得できました。

于 2014-06-29T22:49:08.617 に答える