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

MkMapKit 在 ios 4.3 中也可用,也可能在 3.x 中可用!什么是新的,(就像在所有版本中一样),MkMapKit 的一些新方法:

您应该更好地检查您需要的特定方法(地理编码?=

查看您正在导入的 MkMapKit 的标头(如果我没记错的话:MkMapKit.h),有宏定义特定方法的可用性,具体取决于 ios 版本。

于 2012-12-05T16:19:19.443 回答
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 回答