2012-04-13 9 views
7

初めてアプリをインストールして起動するとすぐに、startUpdatingLocationが呼び出されていなくても、ロケーションサービスがすぐに要求されます。私はその時点でCLLocationManagerインスタンスを割り当てていません。私は実際に電話をかけた後、このプロンプトを遅れて実行して、ユーザーが盲目的にそれをオフにしないようにしたいと思います。このフローは最近iOSで変更されましたか?私は怠惰に尋ねられていたことを覚えています。私は5.1ファームウェアを使用しています。怠け者に位置情報サービスを依頼する

+0

あなたが最初にユーザーがあなたのアプリを起動するときに表示されるダイアログ(アプリ***は使いたい...)についてお話ししていますか? –

+0

確かに、それは5.1のなんらかの理由でそれを行います。 – ssteinberg

+0

@rokjarcはい、そうです。 –

答えて

5

これは興味深いです。あなたの仮説をテストしたところ、ロケーションマネージャは割り当てられていなくても、iOS Location Permissionダイアログが表示されます。私は次のトラブルシューティングを試みました。すべてのステップの後、私はデバイスでプロジェクトを実行し、最後のステップで表示される位置ポップアップを取得するだけでした。

  • スタート新しいアプリ
  • はヘッダ
  • メイクにプロジェクト
  • インポートコア場所に
  • のInfo.plistリンクCoreLocationでGPSを必要とするinfo.plistに位置サービスを必要とロケーションマネージャのプロパティを合成します。
  • CLLocationManagerに対して+ authorizationStatusを問い合わせます。
  • + locationServicesEnabledのCLLocationManagerに問い合わせてください
  • alloc init CLLocationManagerインスタンス
  • CLLocationManagerに位置の更新を開始するように指示します。

プロンプトが表示されます。 CLLocationManagerを初期化して位置の更新を開始した2番目のView ControllerをプッシュしたviewControllerを作成したことを確認してください。パーミッションポップアップは、2番目のView Controllerが押されたときにのみ表示されます。これは、5.1上で動作する最新のXcodeを使用したものです。

ロケーションサービスは、以前のSDKで行ったように、ロケーションを試して回す瞬間に、依然として許可を求めていることを示しました。おそらくコードをチェックして、おそらくここにいくつか貼り付けて、もっと詳しく説明してください。 :)

+0

私はこれをやってみて確かめてみましょう。すべての私の場所の処理はシングルトンを通じて行われるので、私はアプリケーション全体でstartUpdatingLocationを呼び出すことが1回しかありません。私はそれにブレークポイントを持っており、それは決して呼び出されません。私が考えることができる唯一の他の可能性は、何らかの理由で依存フレームワークの1つがこれを引き起こしているということです。私のプロジェクトは大きいので、プロジェクトファイルを再作成するのは難しいでしょう。また、iOS 3.0以降、プロジェクトファイルを使用してアップグレードしています。 –

+1

おそらく、広告ネットワークや遠隔測定フレームワークを使用していますか?ブレークポイントのサイドバーに移動し、下部のプラス記号をクリックし、シンボルボックスに ' - [CLLocationManager startUpdatingLocation] 'と入力すると、プロジェクト全体とライブラリ全体でstartUpdatingLocationが中断されます。 '-startMonitoringSignificantLocationChanges'を聞く価値があるかもしれません – jackslash

+0

これはありがとう、それは知っておくべき良いトリックです!これは、後で表示するために起動時にMKMapViewをバックグラウンドで割り当てる(表示しない)ためです。 –

関連する問題