2

所以我使用 NSClassFromString 来检查用户是否安装了 iOS 5 或 iOS 6 以使用 Apple 的新 iOS 6 MKMapItem。这是代码:

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

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

通过上面的代码,当我在 iOS 5.1 模拟器或 iOS 5.1 设备上运行它时,iOS 6 分支就会运行。但是,如果我使用

Class mapClass = NSClassFromString(@"PKPass");

这也是在 iOS 6 中引入的,我的代码遵循相应的 iOS 5 或 iOS 6 分支。我错过了什么吗?谢谢。

4

1 回答 1

10

MKMapItem存在于 iOS 的早期版本中,因为它当时正在开发中,因此该类存在。相反,Apple 建议您应该使用以下代码同时检查他们在 iOS 6.0 中专门添加的方法:

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

来自MKMapItem 类参考的信息

于 2012-09-20T03:23:05.470 回答