2011-11-24 24 views
5

iphoneにアプリケーションをインストールして初めて実行すると、コアロケーションサービスのユーザ権限が要求されます。ここにシミュレータの画像があります。iPhone:コアロケーションポップアップの問題

私のアプリケーションでは、アプリケーションの最初のビューに現在の場所が必要で、場所に基づいていくつかのイベントが表示されます。アプリケーションが場所を取得できなかった場合は、デフォルトのイベントリストが表示されます。

Don't allow」または「ok」のいずれかのボタンをクリックするまで、アプリケーションフローを保持することは可能ですか?
ユーザーが「許可しない」をクリックすると、kCLErrorDeniedエラーが発生することがわかります。

現在、ユーザーがいずれのボタンもクリックしなければ、アプリケーションはデフォルトのリスト(場所なし)を含むリストページを表示します。その後、ユーザーが「ok」ボタンをクリックすると何も起こりません! 「ok」ボタンをクリックすると、ページを更新するにはどうすればよいですか?

ありがとうございました。

enter image description here

答えて

1

これらのデリゲートメソッドが呼び出されるまではい、ただ何もしません。彼らが「OK」をクリックすると、それはCocoaが移動してユーザの場所を取得しようとする信号に過ぎません - CLLocationManagerが場所を持っているか取得できない場合、アプリケーションを構造化する必要があります。

ポーズあなたのアプリが返されるか失敗するまではあなたのアプリはありません。それはオブジェクト指向の開発が何であるかではありません。

0

didUpdateToLocationまたはdidFailWithErrorのCoreLocationデリゲートが呼び出されるまでビューロジックが待機します。それらのメソッドがあなたのリストとUIデータを呼び出し/ initするようにします。

サンプルコントローラー:

ヘッダー

@interface MyCLController : NSObject <CLLocationManagerDelegate> { 
    CLLocationManager *locationManager; 
} 

@property (nonatomic, retain) CLLocationManager *locationManager; 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation; 

- (void)locationManager:(CLLocationManager *)manager 
     didFailWithError:(NSError *)error; 

@end 

コード

#import "MyCLController.h" 

@implementation MyCLController 

@synthesize locationManager; 

- (id) init { 
    self = [super init]; 
    if (self != nil) { 
     self.locationManager = [[[CLLocationManager alloc] init] autorelease]; 
     self.locationManager.delegate = self; // send loc updates to myself 
    } 
    return self; 
} 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"Location: %@", [newLocation description]); 

    // FILL YOUR VIEW or broadcast a message to your view. 

} 

- (void)locationManager:(CLLocationManager *)manager 
      didFailWithError:(NSError *)error 
{ 
    NSLog(@"Error: %@", [error description]); 

    // FILL YOUR VIEW or broadcast a message to your view. 
} 

- (void)dealloc { 
    [self.locationManager release]; 
    [super dealloc]; 
} 

@end