iOS 6使用MKUserTrackingModeFollowWithHeading映射问题

时间:2013-03-27 16:27:45

标签: ios iphone mkmapview mapkit core-location

我试图解决iOS 6中MKUserTrackingModeFollowWithHeading的两个问题:

  • MKUserTrackingModeFollowWithHeading短暂工作,但它会紧张,几乎立即返回MKUserTrackingModeFollow,尤其是在高缩放级别。

  • 当反复更改MKUserTrackingMode时,应用偶尔会崩溃:我在主线程上获得EXC_BAD_ACCESS,没有进一步的信息。这很难再现,但它反复发生。

有关可能导致此问题的任何想法?这感觉就像一个bug,但Apple拥有自己的地图"应用程序没有表现出这种行为。

为了隔离问题,我创建了一个单视图应用程序,其中包含MKMapViewUIToolbar(在.xib中设置),我在其中添加MKUserTrackingBarButtonItemUIViewController充当<MKMapViewDelegate>。这是完整的实施代码:

#import "ViewController.h"

@implementation ViewController

@synthesize mapView, toolbar;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Add MKUserTrackingBarButtonItem to toolbar
    MKUserTrackingBarButtonItem *trackButton = [[MKUserTrackingBarButtonItem alloc] initWithMapView:self.mapView];
    [toolbar setItems:[NSArray arrayWithObjects:trackButton, nil] animated:YES];
}


- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated
{
    // Log MKUserTrackingMode change
    NSString *modeType = (mode == 0) ? @"None" : ((mode == 1) ? @"Follow" : @"FollowWithHeading");
    NSLog(@"MKUserTrackingMode changed to: %@", modeType);
}

@end

2 个答案:

答案 0 :(得分:4)

这是MapKit中的bug。也可以使用MapKit在Apple Maps中观察,例如Find My Friends应用程序。请注意,Apple Maps应用程序未使用MapKit(至少不是同一版本),因此它不受此错误的影响。

我也确实在MapKit中看到偶发的EXC_BAD_ACCESS崩溃。事实上,MapKit相关的崩溃占我应用程序崩溃的绝大部分。 :(

答案 1 :(得分:3)

我还注意到MKUserTrackingModeFollowWithHeading短暂工作,几乎立即变为MKUserTrackingModeFollow,尤其是在高缩放级别时。

我试过

- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated {
    if (mapView.userTrackingMode != MKUserTrackingModeFollowWithHeading) {
        [mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading];
    }
}

但这会创建一个永久循环,因为我改为MKUserTrackingModeFollowWithHeading后,更改回MKUserTrackingModeFollow。这真的很烦人,因为我不知道将跟踪模式改为MKUserTrackingModeFollow的原因。

很抱歉,我的回答没有用,但我在此发布以确认问题。