10

UIViewController では、コントローラーによって制御されるビューに MKMapView を追加します。

- (void)viewDidLoad {
[super viewDidLoad];
CGRect rect = CGRectMake(0, 0, 460, 320);
map = [[MKMapView alloc] initWithFrame:rect];
map.delegate = self;
[self.view addSubview:map];
 }

後で私が持っているコントローラーで

- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
     NSLog(@"done.");
}

完了は印刷されません。mapView:viewForAnnotation のように他のデリゲート メソッドが呼び出されることはありません。別のアプリで MKMapView を使用していますが、これは私が作成した新しいアプリケーションで発生するようです。他の誰かがこの動作を見たことがありますか?

編集:

問題は、UIViewController が MKMapView のデリゲートにされたときのようです。NSObject の直接のサブクラスは問題なく動作しているようです。私はこのように回避できますが、以前にやったことがあるので、まだ非常に奇妙に思えます。

4

10 に答える 10

9

まったく同じ問題がありました: < MKMapViewDeledate> をコントローラーに割り当て、デリゲートを Interface Builder の「ファイル所有者」にリンクしましたが、実装されたデリゲート メソッドは呼び出されませんでした。

その理由は、iOS 4 以降、マップがキャッシュされ、アプリがキャッシュされたマップを表示するたびに、「mapViewDidFinishLoadingMap」などのメソッドが呼び出されないためです。シミュレーターで「コンテンツと設定」をリセットすると、キャッシュされたマップがクリアされるため、問題が解決します。

于 2011-01-15T18:06:50.697 に答える
7

少し古いですが、iOS 7 以降、機能する可能性のある新しい方法があります。私の問題を解決しました

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
于 2015-06-14T22:48:47.760 に答える
4

おそらく、IB に移動し、MKMapView からビュー コントローラーにコントロール ドラッグし、デリゲートを選択してデリゲートにする必要がありますか?

于 2010-01-28T23:59:01.783 に答える
1

かなり明白かもしれませんが、チェックするだけです:

ビューコントローラの宣言が正しく行われていることを確認しましたか。何かのようなもの:

@interface YourViewController : UIViewController <MKMapViewDelegate>
于 2009-09-04T15:02:19.747 に答える
1

MKMapViewDelegate のメソッドが呼び出されないという同様の問題がありました。私の問題は、コントローラーの -viewDidLoad() で MKCoordinateRegionMakeWithDistance と regionThatFits を設定することでした。家の周りの地域のみを表示し、世界観から始めたくないのです。そのため、コントローラーの viewDidLoad に注釈を追加した後、タイマーを開始しました。1 秒で有効期限が切れたら、上記の API を使用して目的の領域にズームインし、デリゲート メソッドを起動します。ちょっとめまいがするだけで、iPad で吐きそうになります。

これで、メモリ不足の警告に対処するだけで済みます。

于 2010-05-21T15:38:57.637 に答える
-1

私にとってはNSLocationWhenInUseUsageDescription、Info.plistに文字列を追加した後に機能しました

于 2015-05-03T12:12:50.827 に答える
-2

私もあなたと同じ問題に遭遇しました。iPhone SDK 3.2 を使用して、関連付けられた xib ファイル (UIViewController 作成ダイアログのチェックボックス オプション) を使用して新しい UIViewController を作成すると、MKMapViewDelegate のデリゲート メソッドが呼び出されません。

ただし、以下の手順に従うと、うまく動作します。

  1. 新しい UIViewController クラスを作成します (オプションをチェックしないでください: コントローラーに関連付けられた xib ファイルを作成します)

  2. 新しい xib ファイルを作成します。Interface Builder を使用してマップを追加し、ステップ 1 のクラスでオーナー クラスを設定し、マップ ポイントのデリゲート オブジェクトをオーナー クラスに設定します。

  3. 手順 1 で UIViewController クラスのデリゲート メソッドを実装します。

  4. ViewController を (マップを追加して) 使用したい場合は、以下の例のように nib 名でロードします。

    MapPreviewController* mapPreviewController = [[MapPreviewController alloc] 
        initWithNibName:@"MapPreviewController" bundle:[NSBundle mainBundle]];
    
    [self.centerPanelView addSubview:mapPreviewController.view];
    

コードは正常に実行されます。ウィザードを使用して UIViewController を作成したときに、Apple が xib ファイルに対して何を変更したか、または何を行ったかはわかりませんが、それが問題の根本的な原因である可能性があります。このばかげた解決策を見つけるのに1日かかります。

別のものを見つけた場合は、私に共有してください。

ありがとう

于 2010-05-02T10:09:34.637 に答える