プロトコルを実装する CLLocationManager シングルトンがあるので、ユーザーの更新された場所が見つかったことを別のモデル クラス (ServerConnection) に伝えることができます。
メソッドの AppDelegate で、didFinishLaunching を書きます。
ServerConnection* serverConnection = [[ServerConnection alloc] init];
[LocationManager sharedLocationSingleton].delegate = serverConnection;
[[LocationManager sharedLocationSingleton] getUsersLocation];
これは機能せず、ServerConnection クラスのデリゲート メソッドが呼び出されません。ただし、次の行のように AppDelegate クラスをリスナーにしようとすると、正常に動作します。
// self refers to AppDelegate
[LocationManager sharedLocationSingleton].delegate = self;
ここで、私の AppDelegate は必要なデリゲート メソッドを実装し、ユーザーの場所が更新されるとメソッドが呼び出されます。
デリゲートを serverConnection に設定しようとすると、上記のメソッドが失敗するのはなぜですか?
オンラインのチュートリアルでは、通常、UIViewController または AppDelegate を「リスナー」として使用することを示していますが、私の場合は、別のモデル クラスをリスナーにしたいと考えています。それ、どうやったら出来るの?
以下は、プロトコルを使用した LocationManager シングルトン クラスです。
@class LocationManager;
@protocol LocationManagerDelegate <NSObject>
@required
-(void)LocationManagerUpdated:(LocationManager*) locationManager
withValue:(CLLocation*) location;
@end
@interface LocationManager : NSObject <CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager* locationManager;
@property (strong, nonatomic) CLLocation* location;
@property (weak, nonatomic) id <LocationManagerDelegate> delegate;
+(LocationManager*)sharedLocationSingleton;
-(void) getUsersLocation;
@end
サーバー接続用の私のヘッダーファイルは.
#import <Foundation/Foundation.h>
#import "LocationManager.h"
@interface ServerConnection : NSObject <LocationManagerDelegate>
@end
これは、AppDelegate がリスナーに設定されている場合に機能しますが、モデル オブジェクトの ServerConnection には機能しません。これを修正するにはどうすればよいですか?
ありがとう!