我正在构建一个使用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];
}
但由于某种原因,它总是使用谷歌方法。
任何人都可以帮忙!
答案 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:)]) {