2011-03-10 75 views
0

我需要從GPS讀取我的位置! 的問題是,我需要從方法我需要使用CLLocation

- (void)locationUpdate:(CLLocation *)location; 

做出來那麼......這是怎麼了我的工作:

在.h文件我有這個

CLLocation *mylocation; 

在-viewDidLoad

mylocation = [[CLLocation alloc] init]; 
locationController = [[CLController alloc] init]; 
locationController.delegate = self; 
[locationController.locationManager startUpdatingLocation]; 

然後

- (void)locationUpdate:(CLLocation *)location { 
mylocation = location; 
} 

它的工作原理,如果我使用NSLog(在mylocation)我看到我的真實位置! 但是...在另一種方法(與UIButton連接的IBAction)我想使用「mylocation」! 它不工作,我不知道爲什麼!

如果在此方法中,我嘗試這個

NSLog(@"%@", mylocation); 

控制檯報告做到這一點:

<+0.00000000, +0.00000000> +/- 0.00m (speed -1.00 mps/course -1.00) @ 3/10/11 7:21:24 PM Central European Time 

所以變量是空的!

爲什麼?

PS =也在我IBAction爲我有,當然,這

mylocation = [[LCLocation alloc] init]; 

否則應用程序崩潰!

回答

1

also in my IBAction i have, of course, this

mylocation = [[LCLocation alloc] init]; 

所以,你得到的零個值,因爲你總是與新創建的空白位置覆蓋您的位置值 - 你不應該這樣做。

使您的應用程序崩潰的問題在於您在locationUpdate方法中獲得了自動發佈的值,因此爲了確保其在該方法外有效,您必須保留該方法。 (並且不要忘記釋放舊值)。要做到這一點最簡單的方法就是使用它創建myLocation伊娃和訪問伊娃一個property

// .h file 

@property (nonatomic, retain) CLLocation *myLocation; 

// .m 
@synthesize myLocation; 
... 
- (void)locationUpdate:(CLLocation *)location { 
    self.mylocation = location; 
} 

- (void) dealloc{ 
    [myLocation release]; 
    myLocation = nil; 

    ... 
    [super dealloc]; 
} 
+0

是的,謝謝!!!!它非常簡單! :) 謝謝! – JAA 2011-03-10 19:15:56

2

這條線:

mylocation = location; 

是mylocation的內存指針設置於所述位置經理,後來是越來越釋放返回的一個。

編輯:

mylocation = [[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude]; 
+0

都能跟得上:錯誤:左值要求作爲分配 的左操作數 (我認爲我不能使用mylocation.coordinate .xxx) – JAA 2011-03-10 18:40:01