2010-09-11 128 views
1

繼續獲取EXC_BAD_ACCESS。冉NSZombieEnabled並沒有想出什麼。CoreLocation在設備上崩潰但不在模擬器上

在模擬器控制檯:

2010-09-11 23:39:56.876 [19072:207] 1.309789, lat, 103.772196, lon 

在設備控制檯:

EXC_BAD_ACCESS 

的代碼行:

NSLog(@"%f, lat, %f, lon",latitudeString,longitudeString); 

什麼CLManager正在做:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
NSLog(@"Entering mlocationmanager did updatetolocation"); 
    latitudeString = [NSString stringWithFormat:@"%f", newLocation.coordinate.latitude]; 

    longitudeString = [NSString stringWithFormat:@"%f", newLocation.coordinate.longitude]; 

    NSLog(@"lat %@ long %@", latitudeString, longitudeString); 
NSLog(@"%@",newLocation.description); 
if (latitudeString.length >0 && longitudeString.length > 0){ 
    NSLog(@"Yes both are more than 0"); 
    locationIsReady = YES; 

} 
[self.tableView reloadData]; 
} 

這裏發生了什麼?這兩個變量都在我的頭文件中,並且CLLocationManagerDelegate符合。在這工作了幾個小時,但沒有運氣。希望你們能幫忙。

NSString *latitudeString; 
NSString *longitudeString; 

回答

1

的代碼行確實應該是您的罪魁禍首:

NSLog(@"%f, lat, %f, lon",latitudeString,longitudeString); 

正確NSLog格式論據Objective-C對象是%@%f用於浮點數字。

1

終於修好了很久。

花了我一些時間來認識到,NSXMLParser實際上覆蓋了我的一些變量(我不知道爲什麼)。所以最後,我在XML解析後調用了CLLocationManager。問題解決了。

+2

你不知道爲什麼所以你移動了一些代碼,現在它恰好工作。我認爲你最好找到真正的原因。 – 2010-09-11 18:05:40

+0

你的代碼肯定是做錯了事;你可能只是在別的地方把碰撞移開了。儘管如此, – 2010-09-12 13:28:04

2

你真的不需要將newLocation.coordinate.longitude轉換成NSString來打印它。只需在格式字符串中使用%f即可打印它們。

而且,當你寫:

if (latitudeString.length >0 && longitudeString.length > 0) 

你是比較字符串,這將總是大於零的長度。由於經度或緯度爲零,轉換後的字符串將爲@"0.0",其長度爲3。我懷疑你真正想在這裏是:

if (newLocation.coordinate.latitude != 0.0 
    && newLocation.coordinate.longitude != 0.0) 
+2

(0,0)是完全有效的座標;它恰好在某處。 – 2010-09-12 13:27:22

相關問題