2

そこで、NSClassFromStringを使用して、Appleの新しいiOS6MKMapItemを使用するためにユーザーがiOS5またはiOS6をインストールしているかどうかを確認しています。これはコードです:

- (void)openDirections:(id)sender {
    Class mapClass = NSClassFromString(@"MKMapItem"); 

    if (mapClass == nil) {
    // iOS 5, do something here
    }
    else {
    // iOS 6, open up maps with MKMapItem.
    }
}

上記のコードでは、iOS5.1シミュレーターまたはiOS5.1デバイスで実行すると、iOS6ブランチが実行されます。しかし、私が使用する場合

Class mapClass = NSClassFromString(@"PKPass");

これもiOS6で導入され、私のコードは適切なiOS5またはiOS6ブランチに従います。私は何かが足りないのですか?ありがとう。

4

1 に答える 1

10

MKMapItemiOSの以前のバージョンには、当時開発中であったため存在し、したがってクラスが存在していました。代わりに、次のコードを使用して、iOS6.0で具体的に追加されたメソッドも確認することをお勧めします。

Class itemClass = [MKMapItem class];
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
   // Use class
}

MKMapItemクラスリファレンスからの情報

于 2012-09-20T03:23:05.470 に答える