2013-08-26 33 views
0

我正在使用谷歌的地方API, JSON返回有效的結果,在我的異步方法我設置標記每個結果,方法結束,所有的突然我得到以下螺紋1:EXC_BAD_ACCESS代碼:2個地址:0x9243e8,在輸出窗口,我得到如下:[71539:C07] - [__ NSCFString CGImage]:無法識別的選擇發送到實例0xb19dd10谷歌地方API - JSON返回正確的數據,然後發生異常

我沒有線索如何調試,或在哪裏尋找問題,我所有的參數看起來都不錯。

感謝

+0

你可以顯示你的json響應和json解析的數據嗎? – Venkat

+0

崩潰是因爲您正在訪問的鍵值是一個字符串,並且您將它作爲圖像提供。這就是爲什麼因爲字符串odes沒有圖像方法,它會給你帶來不好的過度。 –

回答

0

我懷疑你在做什麼是作爲一個評論者說,處理返回的JSON對象作爲一種事實並非如此。具體來說,從你的錯誤,你正在像一個圖像對待一個字符串。一般來說,JSON並不包含實際的圖像,所以當你反序列化它時,你將不會得到圖像。在Google Places API中,它不會向您發送圖片。相反,它會將網址發送給圖片。您必須使用從Places API獲取的網址下載圖片。

這是我使用的一些代碼。該方法基於一個CLLocation的API獲取地點列表並將其作爲一個更容易消化NSDictionaryNSArray對象中的每個包含關於一個發生的重要滿足數據:

-(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的圖標。

相關問題