2014-12-06 39 views
0

我想爲我的MKMapView打開用戶跟蹤模式。 MKMapView是故事板的一部分,所以我相信它會自動初始化。當我在viewDidLoadviewDidAppear上運行調試器時,它會打印MKMapView的地址,因此它似乎已被初始化。下面是我在我的FirstViewController類方法:在類中的某些方法不能識別MKMapView的實例已經存在

#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沒有?

+0

您是否可能將地圖視圖用戶跟蹤模式設置爲'.FollowWithHeading'?因爲如果這是你的初始狀態,你的'-changeTracking'只能處理其他兩種模式,並且永遠不會執行'if'模塊。 – incanus 2014-12-10 16:53:49

回答

0

您需要更好地處理髮生了什麼事。

你有連接到地圖視圖的插座嗎?

將NSLog添加到您的viewDidLoad方法並記錄self.currentMap。同時記錄自我的地址。

然後,在其他方法中,還記錄自身的地址(使用%X格式字符串,並將自身轉換爲無符號長整數)。

我的猜測:你的出口鏈接被破壞,或者你正在創建你的類的多個實例而沒有意識到它。

+0

謝謝你的回答。是的,我有一個連接到我的地圖視圖的插座。我爲每個方法添加了self和self.currentMap的NSLog,並且三個地址都是相同的。 self.currentMap的地址與前兩個方法相同,並且changeTracking的self.currentMap的地址爲null。我不認爲我的插座損壞,因爲地圖在模擬器中正常工作,只要打開和關閉顯示UserLocation,但跟蹤模式不會改變,因爲changeTracker運行在null self.currentMap上。 – agillespie 2014-12-06 02:02:56

相關問題