类中的某些方法无法识别MKMapView的实例已经存在

时间:2014-12-06 00:30:52

标签: ios objective-c mkmapview mapkit

我正在尝试为我的MKMapView打开用户跟踪模式。 MKMapView是故事板的一部分,所以我相信它会自动初始化。当我在viewDidLoadviewDidAppear上运行调试器时,它会打印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.currentMapnil。因此,当它更改用户跟踪模式时,它实际上对viewDidLoadviewDidAppear识别的地图没有任何影响。为什么前两个方法识别MKMapView的实例但changeTracking没有?

1 个答案:

答案 0 :(得分:0)

你需要更好地处理正在发生的事情。

您的地图视图是否有连接插座?

将NSLog添加到viewDidLoad方法并记录self.currentMap。同时记录自己的地址。

然后,在您的其他方法中,还要记录self的地址(使用%X格式字符串,并将self转换为unsigned long)。

我的猜测:您的出口链接已损坏,或者您正在创建类的多个实例而未意识到它。