私はしばらくこれに取り組んできました、そして私は私の論理を設計するのにいくらかの助けが必要です。
この順序で3つのことを実行したい1)ユーザーの場所を取得する2)そのユーザーの場所でWebサービスを呼び出す3)ユーザーインターフェイスに結果をロードする
結果を簡単に更新できるように設計したいので、ユーザーが更新ボタンを押した場合は、手順1〜3をもう一度実行します。
今は次のようにしています。これは私のViewControllerのコードです。
- (void) viewDidLoad {
//initialize CLLocationManager
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
- (void) locationManager: (CLLocationManager *)manager
didUpdateToLocation: (CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
if (oldLocation!= nil) { // make sure to wait until second latlong value
[self setLatitude:newLocation.coordinate.latitude];
[self setLongitude: newLocation.coordinate.longitude];
[self.locationManager stopUpdatingLocation];
self.locationManager.delegate = nil;
[self makeUseOfLocationWithLat:[self getLatitude] andLon:[self getLongitude]];
}
- (void) makeUseOfLocationWithLat: (double) lat andLon: (double) lon {
// call web service
[self loadUI];
}
- (void) loadUI {
// loads the user interface
}
私が間違っている場合は私を訂正してください、しかし私のデザインは本当に悪いです。モジュール式ではなく、各メソッドは相互に関連付けられています。また、モデルクラスではなく、ViewControllerで集中的なWebサービス呼び出しを行っています。これをどのように適切に設定しますか?私が抱えている大きな問題の1つは、緯度と経度の変数がいつ値を取得するかわかりません。デリゲートメソッドからmakeUseOfLocationを呼び出さないと、緯度と経度の値がnilのmakeUseOfLocationを呼び出すことになります。
私は自分のロケーション管理、NSKeyValueObserving Protocols、dispatch_queues、NSOperationsのシングルトンを調べましたが、iOSでの開発は初めてであり、何をしようとしてもどこかで行き詰まっています。これを設定する方法についてのあなたの考えを教えてください。
お時間をいただき、誠にありがとうございます。