マップコントローラオブジェクトとロケーションマネージャオブジェクトの両方が、アプリケーションデリゲートでインスタンス化されていました。
- (void) restartLocationManager {
if (locationManager)
[locationManager release];
locationManager = [[[CLLocationManager alloc] init] retain];
locationManager.purpose = NSLocalizedString(@"Location Service Purpose", nil);
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];
}
だからこれは、マップの初期化中に何かがトリガーされたことを手掛かりだった:ロケーションマネージャは、このコードでインスタンス化されるまでは、ロケーションマネージャの目的のプロパティが設定されていない
mapController = [[[MapController alloc] initWithFrame:CGRectMake(0, 0, 0, 0)] retain];
[self restartLocationManager];
最初の警告。
最初のアラートで位置情報サービスをオンにすることを拒否したため、地図コントローラーが初期化され、アラートを表示する必要がありました。マップコントローラの初期化がこれです(それはシングルトンの一部であり、その点でいくつかのクリーンアップが必要ですが、それを無視して...):コードをステップ実行
- (id) initWithFrame:(CGRect)aFrame {
@synchronized(self) {
if (!theMap) {
if (!self) self = [super init];
theMap = [[[MKMapView alloc] initWithFrame:aFrame] retain];
theMap.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
theMap.showsUserLocation = YES;
theMap.delegate = self;
}
return self;
}
、私はときに、第2の警告ショーアップを見てshowUserLocation
行が実行されました。正確に絞り込むためにもう少しテストをしなければならないだろうが、今は正しい方向に進んでいると思う。
出典
2012-01-23 05:38:04
Jim
実際のコードを追加して、少し手伝ってもらうことができますか? –
まず、これが典型的な動作であるか、それとも正常でないのかを知りたいだけですか?それが正常でない場合は、何が起こっているのかを知るためにもう少し詳しく調べてみましょう。私は位置情報サービスを無効にしてあまりプレイしていないので、これは私には新しいものです。 – Jim
これはデフォルトの動作ではなく、おそらくあなたは何か間違っているでしょう。ロケーションマネージャをどのように使っているのか、いくつかのコードを投稿してください。 – saadnib