我正在尝试为我的MKMapView打开用户跟踪模式。 MKMapView是故事板的一部分,所以我相信它会自动初始化。当我在viewDidLoad
和viewDidAppear
上运行调试器时,它会打印MKMapView的地址,因此它似乎已初始化。以下是我在FirstViewController类中的方法:
#import "FirstViewController.h"
#import "Options.h"
#import "AppDelegate.h"
@interface FirstViewController ()
@end
@implementation FirstViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
self.currentMap.delegate = self;
[appDelegate.locationManager requestAlwaysAuthorization];
appDelegate.locationManager.distanceFilter = 20.0;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:NO];
if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedAlways)
{
UIAlertView *alert= [[UIAlertView alloc]initWithTitle:@"Cannot Access Location"
message:@"Please allow Location Services in Settings."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles: nil];
[alert show];
}
self.currentMap.showsUserLocation = [[NSUserDefaults standardUserDefaults] boolForKey:@"mapLocation"];
}
- (void)changeTracking {
if (self.currentMap.userTrackingMode == MKUserTrackingModeNone)
{
[self.currentMap setUserTrackingMode:MKUserTrackingModeFollow animated:YES];
}
else if (self.currentMap.userTrackingMode == MKUserTrackingModeFollow)
{
[self.currentMap setUserTrackingMode:MKUserTrackingModeNone animated:YES];
}
}
当我从另一个班级拨打[appdelegate.firstViewController changeTracking]
时,changeTracking
方法会执行,但会认为self.currentMap
是nil
。因此,当它更改用户跟踪模式时,它实际上对viewDidLoad
和viewDidAppear
识别的地图没有任何影响。为什么前两个方法识别MKMapView的实例但changeTracking
没有?
答案 0 :(得分:0)
你需要更好地处理正在发生的事情。
您的地图视图是否有连接插座?
将NSLog添加到viewDidLoad方法并记录self.currentMap。同时记录自己的地址。
然后,在您的其他方法中,还要记录self的地址(使用%X格式字符串,并将self转换为unsigned long)。
我的猜测:您的出口链接已损坏,或者您正在创建类的多个实例而未意识到它。