0

Mapkit を使用するアプリケーションを構築しています。これはIOS6でのみ利用できることを知っています。したがって、これが利用可能かどうかを確認する必要があります。次のコードを使用しています。

  if(NSClassFromString(@"MKMapKit")) {
        // MKMapKit is available in this OS
        CLLocationCoordinate2D coords =
        CLLocationCoordinate2DMake(51.097185,5.621653);

        NSDictionary *address = @{
        (NSString *)kABPersonAddressStreetKey: @"Weg naar oqdffds 59",
        (NSString *)kABPersonAddressCityKey: @"Msfsf",
        (NSString *)kABPersonAddressStateKey: @"Limbusqfqsdf",
        (NSString *)kABPersonAddressZIPKey: @"3670",
        (NSString *)kABPersonAddressCountryCodeKey: @"BE",
        (NSString *)kABPersonPhoneMainLabel:@"04741234567"
        };
        MKPlacemark *place = [[MKPlacemark alloc]
                              initWithCoordinate:coords addressDictionary:address];

        MKMapItem *mapItem = [[MKMapItem alloc]initWithPlacemark:place];
        mapItem.phoneNumber = @"0141343252";

        //current location
        MKMapItem *mapItem2 = [MKMapItem mapItemForCurrentLocation];


        NSArray *mapItems = @[mapItem, mapItem2];

        NSDictionary *options = @{
            MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving,
            MKLaunchOptionsMapTypeKey:
            [NSNumber numberWithInteger:MKMapTypeStandard],
            MKLaunchOptionsShowsTrafficKey:@YES
        };

        [MKMapItem openMapsWithItems:mapItems launchOptions:options];


    }else {
        NSLog(@"tot hier");
        // MKMapKit is not available in this OS
        locationController = [[MyCLController alloc] init];
        locationController.delegate = self;
        [locationController.locationManager startUpdatingLocation];
    }

しかし、何らかの理由で、常に google メソッドを使用します。

誰でも助けてくれますか!

4

2 に答える 2

0

すでに述べたように、MapKitは iOS 6 よりもかなり前から利用可能でした。

確認したいのはMKMapItem(「MKMapKit」ではありません)です。

ただし、のドキュメントでMKMapItem説明されているように(コード例付き):

特定の iOS リリースでクラスが実行時に使用可能かどうかを判断するには、通常、そのクラスが nil かどうかを確認します。残念ながら、このテストは MKMapItem に対して完全に正確ではありません。このクラスは iOS 6.0 から公開されていましたが、それ以前は開発中でした。このクラスは以前のリリースにも存在しますが、それらのリリースでは使用しないでください。

アプリケーションでマップ アイテムを使用できるかどうかを実行時に判断するには、クラスと openMapsWithItems:launchOptions: クラス メソッドが存在するかどうかをテストします。そのメソッドは、iOS 6.0 までクラスに追加されませんでした。コードは次のようになります。

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

したがって、このチェック:

if(NSClassFromString(@"MKMapKit")) {

次のようにする必要があります。

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

また:

Class itemClass = NSClassFromString(@"MKMapItem"); 
if (itemClass && [itemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)]) {
于 2012-12-05T16:33:35.503 に答える
0

MkMapKit は ios 4.3 でも利用できます。おそらく 3.x でも利用できます。新しいことは、(すべてのリリースと同様に) MkMapKit のいくつかの新しいメソッドです。

必要な特定の方法を確認する必要があります (ジオコーディング ?=

インポートしている MkMapKit のヘッダーを調べます (正しく覚えている場合: MkMapKit.h)。ios のバージョンに応じて、特定のメソッドの可用性を定義するマクロがあります。

于 2012-12-05T16:19:19.443 に答える