如何检查Mapkit是否可用?

时间:2012-12-05 16:12:14

标签: iphone objective-c ios google-maps mkmapview

我正在构建一个使用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];
    }

但由于某种原因,它总是使用谷歌方法。

任何人都可以帮忙!

2 个答案:

答案 0 :(得分:0)

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

您最好检查一下您需要的具体方法 (地理编码?=

查看要导入的MkMapKit的标题(如果我记得正确:MkMapKit.h),有定义可用性的宏 特定方法,取决于ios版本。

答案 1 :(得分:0)

如前所述, MapKit 在iOS 6之前已经可用。

您想要检查的是MKMapItem(不是" MKMapKit")。

但是,作为documentation for MKMapItem explains(带代码示例):

  

确定某个类在给定iOS中是否在运行时可用   发布时,通常会检查该类是否为零。不幸,   对于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:)]) {