Edit:
Извините, было поздно, когда я опубликовал вопрос, давайте посмотрим, смогу ли я прояснить это.
В настоящее время мое приложение не имеет ошибок компиляции и работает, но я ожидаю, что это место
контакты на MKMapview. Когда я запускаю его, на карте не отображаются значки. Когда я исследую консоль, я не вижу никаких ошибок или показаний. Я сузил ошибку
вплоть до этих двух строк:
NSString* lng_coord = [[dict objectForKey:key] description];
[CelebsAnnotation setLongitude:[lng_coord doubleValue]];
Проблема в том, что я не могу получить lng_coord doubleValue, чтобы дать мне двойное значение, потому что если бы это было так, то бы появились контакты. Я знаю это, потому что если я сделаю это:
[CelebsAnnotation setLongitude:54.39281]; // for example
тогда на карте появятся булавки. Так что, если lng_coord не дает мне doubleValue, это делает
я считаю, что это не должен быть NSString, что означает, что objectForKey не возвращает NSString (хотя у меня есть все основания полагать, что это потому, что я использовал):
// Use when fetching text data
NSString *response = [request responseString];
и затем проанализировал эту строку ответа, используя SBJSON. Я знаю, что я успешно анализирую значения lng / lat из моего ответа JSON, потому что я могу сделать это:
NSLog(@"%@", lng_coord);
и выводит правильные числовые значения в консоли. Я пытался привести возвращаемое значение из objectForKey так:
NSString* lng_coord = (NSString*)[dict objectForKey:key];
безуспешно. Затем я искал вокруг SO способ превратить возвращаемое значение из objectForKey в NSString, и «описание», казалось, было ответом, хотя это
также не работает для меня.
ТАК .. чтобы подвести итог, мне нужно значение NSString для lng_coord, чтобы я мог получить doubleValue этой строки! Спасибо за ваше время всем. Ничего, кроме любви к переполнению стека.
Вот мой JSON-кодированный ответ от моего PHP-скрипта, который анализируется моим приложением:
[
{"lng":"49.2796758","lat":"-123.1365125"},
{"lng":"49.2695877","lat":"-123.0443507"},
{"lng":"50.4547222","lat":"-104.6066667"},
{"lng":"49.2696243","lat":"-123.0696036"},
{"lng":"49.2688942","lat":"-123.1388003"},
{"lng":"49.2796758","lat":"-123.1365125"}
]
А вот функция, которая содержит ошибку, которую я описал выше:
- (void)requestFinished:(ASIHTTPRequest *)request
{
// Use when fetching text data
NSString *response = [request responseString];
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSArray *pins = [parser objectWithString:response error:nil]; // an array of dictionaries that contain coords
// loop through the pins array of dictionaries (lng, lat)
for (int i = 0; i < [pins count]; i++)
{
NSDictionary *dict = [pins objectAtIndex:i];
for(NSString *key in dict) {
if ([key isEqualToString: @"lng"]) { // access of the longitude coord
NSString* lng_coord = [[dict objectForKey:key] description];
[CelebsAnnotation setLongitude:[lng_coord doubleValue]];
}
if ([key isEqualToString:@"lat"]) { // access of the latitude coord
NSString* lat_coord = [[dict objectForKey:key] description];
[CelebsAnnotation setLatitude:[lat_coord doubleValue]];
}
}
// now that you've set the lng/lat, insert the annotation at index i
CelebsAnnotation *newAnnotation = [[CelebsAnnotation alloc] init]; // template object for all pins
[self.mapAnnotations insertObject:newAnnotation atIndex:i];
[newAnnotation release];
[self.mapView removeAnnotations:self.mapView.annotations];
[self.mapView addAnnotation:[self.mapAnnotations objectAtIndex:i]]; // add annotation
}