2016-11-01 19 views
0

私は、ユーザーの場所を追跡することを含むiosアプリケーションを作成しています。私は、ユーザーがどのviewcontrollerに関係なく、場所を追跡する必要があります。ユーザーが新しいviewcontrollerに移動するたびに、場所の更新をオン/オフすることなく、この一定の位置追跡の効果を得る方法はありますか?私は何らかのシングルトンを必要としますか?Xcode:シームレスに位置更新を維持する

+0

@boraseoksoonすべての1つの質問に「感謝の気持ち」を追加しないでください。質問に感謝する必要はありません。 –

答えて

0

ViewControllerではなく、他のオブジェクトクラスにlocationManagerデリゲートを実装します。次に、このオブジェクトの内部で、varを含む場所を作成し、このvarをすべてのView Controllerで使用します。このオブジェクトをシングルトンとして使用するか、コントローラ間で渡すことができます。

0

ロケーションマネージャとその代理人を使用する方法はいくつかあります。最良の方法は、アプリケーションデリゲートでロケーションマネージャを実装することです。他の人は、モデルオブジェクトの場所を制御している間にビューコントローラでそれを使用します。

私は、Damian Dudyczの提案のように、別のモデルクラスを使用することをお勧めします。これはシングルトンである必要はありません。たとえば、アプリケーションに必要なすべての場所固有の情報を提供するクラスを定義します。このクラスには、アプリでの場所固有のニーズに必要なプロパティとメソッドがあります。次に、プロジェクト機能のバックグラウンドでロケーションの更新を有効にします。例えば、あなたがこのクラスで同じCLLocation特定のメソッドを置くことができます

class myLocationClass: NSObject, CLLocationManagerDelegate { 

    //Properties 
    var myLocations = [CLLocations]() 
    var myGeocodeName = "" 
    var myDistanceCovered = 0.0 
    var myLocationManager : CLLocationManager? //You can also make this lazy to prevent optional properties 
    var ... etc. 

あなたは、その後のようなクラスで終わる可能性

func getLocationName(from location: CLLocation) { 
//Your reverse geocoding code here. 
} 

func locationManager(_ manager: CLLocationManager,   didUpdateLocations locations: [CLLocation]) { 
//Your location update stuff here. 
} 

をすることができますあなたのさまざまなビューコントローラから現在、すべてのパブリックプロパティとメソッドを呼び出して、場所の更新を開始し、値を取得し、場所の更新を停止します。私はこのようにしています。私の場所コードはすべてひとつのクラスの中にあるので、コードを維持しておくのは大変です。

あなたのクラスがかなり大きくなる可能性があり、また維持管理が難しいことがあります。私にとって、これはまだ起こっていない。

これが役に立ちます。

関連する問題