2017-04-08 14 views
0

私はiOS開発に新しく、複数のビューコントローラでユーザーの場所を使用するアプリケーションを作成しようとしています。私は1つの別のクラスに位置マネージャを実装しようとしているし、コールバック関数からビューコントローラに場所を送信するときはいつでも、新しい場所が利用可能です。シングルトンを使用する実装を見てきましたが、代わりにプロトコルメソッドを使用したいと思っていました。過去にこのような例は見受けられましたが、私はこれ以上見つけられませんでした。iOS 10:別のクラスとしてのCLManager - コールバックを受信

このような方法でデザインするには、どのような方法がよいでしょうか?ここでは、参照用に、私のView ControllerやLocation Managerクラスのキーパーツをいくつか紹介します。

ViewController.m

- (void)viewDidLoad { 

locMan = [[LocClass alloc] init]; 
[locMan startLocationManager]; 
... 
} 

LocClass.m(ロケーションマネージャクラス)

- (void)startLocationManager { 
[self.coreLocationManager startUpdatingLocation]; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ 
//the usual stuff here... 
} 

どのように私はdidUpdateLocationsから場所を返送するプロトコルのメソッドを使用することができます。それはだときViewController.mに利用可能ですか?可能であれば、例を参照することは素晴らしいことです。 LocClass.hファイルで

+0

PS:私はこの例を見ましたが、私が説明したように、これは私が探しているものではありません:http://stackoverflow.com/questions/11513259/ios-cllocationmanager-in-a-separate-これはシングルトンを使用しているためです。 – moshikafya

答えて

1

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ 
//the usual stuff here... 

    if([self.delegate conformsToProtocol:@protocol(LocationUpdateProtocol)] && [self.delegate respondsToSelector:@selector(locationUpdatedWithManager:newLocations:)]) { 
     [self.delegate locationUpdatedWithManager:manager newLocations:locations]; 
    } 
} 

今すぐmainViewcontrollerクラスは、この議定書

@interface ViewController() <LocationUpdateProtocol> 

そして実装する必要があり、あなたの.mファイルに

@protocol LocationUpdateProtocol <NSObject> 
@optional 
// Override this method in UIViewController derived class to get back the location details. 
-(void)locationUpdatedWithManager:(CLLocationManager *)manager newLocations:(NSArray *)locations; 
@end 

@interface LocClass : NSObject 
@property (nonatomic, weak) NSObject<LocationUpdateProtocol> *delegate; 
@end 

そして、プロトコルメソッドを追加あなたがinitilazeロケーションマネージャクラスを配置する場所、デリゲートを設定する

- (void)viewDidLoad { 

locMan = [[LocClass alloc] init]; 
[locMan startLocationManager]; 
locMan.delegate = self; 
... 
} 

//Will get the delegate callback here. 
- (void)locationUpdatedWithManager:(CLLocationManager *)manager newLocations:(NSArray *)locations{ 
} 
+0

これは完璧に機能しました。 ++ 1。 – moshikafya

関連する問題