我正在使用谷歌的地方API, JSON返回有效的結果,在我的異步方法我設置標記每個結果,方法結束,所有的突然我得到以下螺紋1:EXC_BAD_ACCESS代碼:2個地址:0x9243e8,在輸出窗口,我得到如下:[71539:C07] - [__ NSCFString CGImage]:無法識別的選擇發送到實例0xb19dd10谷歌地方API - JSON返回正確的數據,然後發生異常
我沒有線索如何調試,或在哪裏尋找問題,我所有的參數看起來都不錯。
感謝
我正在使用谷歌的地方API, JSON返回有效的結果,在我的異步方法我設置標記每個結果,方法結束,所有的突然我得到以下螺紋1:EXC_BAD_ACCESS代碼:2個地址:0x9243e8,在輸出窗口,我得到如下:[71539:C07] - [__ NSCFString CGImage]:無法識別的選擇發送到實例0xb19dd10谷歌地方API - JSON返回正確的數據,然後發生異常
我沒有線索如何調試,或在哪裏尋找問題,我所有的參數看起來都不錯。
感謝
我懷疑你在做什麼是作爲一個評論者說,處理返回的JSON對象作爲一種事實並非如此。具體來說,從你的錯誤,你正在像一個圖像對待一個字符串。一般來說,JSON並不包含實際的圖像,所以當你反序列化它時,你將不會得到圖像。在Google Places API中,它不會向您發送圖片。相反,它會將網址發送給圖片。您必須使用從Places API獲取的網址下載圖片。
這是我使用的一些代碼。該方法基於一個CLLocation
的API獲取地點列表並將其作爲一個更容易消化NSDictionary
的NSArray
對象中的每個包含關於一個發生的重要滿足數據:
-(NSArray*)getPlaceListForLocation:(CLLocation*)inLocation {
NSString* requestStr = [NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/nearbysearch/json?key=%@&location=%f,%f&radius=100&sensor=true",self.googleAPIKey,inLocation.coordinate.latitude,inLocation.coordinate.longitude];
NSURL* requestURL = [NSURL URLWithString:requestStr];
NSLog(@"Fetching place data with URL = %@", requestURL);
NSData* requestData = [NSData dataWithContentsOfURL:requestURL];
if (nil != requestData) {
NSError* jsonError = nil;
id resultsObj = [NSJSONSerialization JSONObjectWithData:requestData options:0 error:&jsonError];
if (nil == resultsObj) {
if (nil != jsonError) {
NSLog(@"%@",jsonError.description);
}
return nil;
}
NSArray* itemList = [resultsObj objectForKey:@"results"];
if (nil == itemList || itemList.count == 0) {
return nil;
}
NSMutableArray* placeList = [NSMutableArray arrayWithCapacity:itemList.count];
for (NSDictionary* item in itemList) {
NSString* name = [item objectForKey:@"name"];
NSString* iconURL = [item objectForKey:@"icon"];
NSString* vicinity = [item objectForKey:@"vicinity"];
NSDictionary* geometryDict = [item objectForKey:@"geometry"];
NSDictionary* locationDict = [geometryDict objectForKey:@"location"];
NSMutableDictionary* itemDict = [NSMutableDictionary dictionaryWithCapacity:2];
if (nil != name) {
[itemDict setObject:name forKey:@"name"];
}
if (nil != iconURL) {
[itemDict setObject:iconURL forKey:@"iconurl"];
}
if (nil != vicinity) {
[itemDict setObject:vicinity forKey:@"vicinity"];
}
if (nil != locationDict) {
NSString* latitudeStr = [locationDict objectForKey:@"lat"];
NSString* longitudeStr = [locationDict objectForKey:@"lng"];
double latitude = [latitudeStr doubleValue];
double longitude = [longitudeStr doubleValue];
CLLocation* placeLoc = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
CLLocationDistance distance = [inLocation distanceFromLocation:placeLoc];
[itemDict setObject:[NSNumber numberWithDouble:distance] forKey:@"distance"];
}
[placeList addObject:itemDict];
}
return placeList;
}
return nil;
}
然後我在顯示這些使用返回的NSArray
作爲數據源的表視圖。爲了顯示圖標,我使用類似MKNetworkImageView
的東西來獲取基於URL的圖標。
你可以顯示你的json響應和json解析的數據嗎? – Venkat
崩潰是因爲您正在訪問的鍵值是一個字符串,並且您將它作爲圖像提供。這就是爲什麼因爲字符串odes沒有圖像方法,它會給你帶來不好的過度。 –