2015-04-15 2 views
1

Я получаю широту, долготу и многие другие поля с сервера.Точки заговора из словаря

Я поместил каждую строку из базы данных в отдельный словарь в массиве.

Я пытаюсь отобразить точку из широты и долготы, но когда я пытаюсь получить доступ к широте по ключу, я получаю ошибку компилятора No visible @interface for NSDictionary....

Ответ сервера

[{ "ID": 1, "user_id": 0, "широта": "42,2367", "долгота": "- 71,11332", "статус": "активный" , "responded_at": NULL, "created_at": "2015-04-13T12: 52: 51.144Z", "updated_at": "2015-04-13T12: 52: 51.161Z"}, { "идентификатор": 2,» user_id ": 0," широта ":" 42,23497" , "долгота": "- статус 71,11238", "": "активный", "responded_at": нулевой, "created_at": "2015-04-13T12: 57: 03,000 Z», "updated_at": "2015-04-13T12: 57: 03.002Z"}, { "идентификатор": 3, "идентификатор_пользователя": 0, "широта": "42,24222", "долгота": "- 71,11536" , "статус": "активный", "responded_at": NULL, "created_at": "2015-04-13T12: 57: 49.012Z", "updated_at": "2015-04-13T12: 57: 49.014Z"}, { "ID": 4, "user_id": 0, "широта": "42,24194", "долгота": "- 71,11556", "статус": "активный", "responded_at": нулевой, "created_at": "2015 -04-13 Т13: 03: 10.710Z», "updated_at": "2015-04-13T13: 03: 10.713Z"}, { "идентификатор": 5, "идентификатор_пользователя": 0, "широта": "42,23493", "долгота" : "- 71,11244", "статус": "активный", "responded_at": нулевой, "created_at": "2015-04-13T13: 05: 39.713Z", "updated_at": "2015-04-13T13: 05: 39.716Z "}, {" идентификатор ": 6," идентификатор_пользователя ": 0," широта ":" 42,23598" , "долгота": "- 71,11467", "статус": "активный", "responded_at": NULL,» created_at ":" 2015-04-13T13: 08: 12.983Z», "updated_at": "2015-04-13T13: 08: 12.986Z"}, { "идентификатор": 7, "идентификатор_пользователя": 0, "широта" : "42,23598", "долгота": "- 71,11467", "статус": "активный", "responded_at": нулевой, "created_at": "2015-04-13T13: 08: 38.115Z", "updated_at":» 2015-04-13T13: 08: 38.118Z "}, {" ID ": 8," идентификатор_пользователя ": 0," широта ":" 42,23794" , "долгота": "- статус 71,11471", "": "активный" , "responded_at": NULL, "created_at": "2015-04-13T13: 10: 11.593Z", "updated_at": "2015-04-13T13: 11: 19.467Z"}]

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    // The request is complete and data has been received 
    // You can parse the stuff in your instance variable now 

    NSError *error; 
    NSMutableDictionary *json = [NSJSONSerialization 
             JSONObjectWithData:_responseData 
             options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves 
             error:&error]; 

    for (int i = 0; i < json.count; i++) { 

     double latitude = [[json objectAtIndex:i] objectForKey:@"latitude"]; 
     double longitude = [[[json objectForKey:@"longitude"]objectAtIndex:i] doubleValue]; 

     CLLocationCoordinate2D latlng = CLLocationCoordinate2DMake(latitude, longitude); 

     MKPointAnnotation *point = [[MKPointAnnotation alloc] init]; 
     [point setCoordinate:latlng]; 
     [worldView addAnnotation:point]; 

    } 
} 

ответ

2

Ответ сервера (как вы говорите в вопросе) представляет собой набор словарей.

Таким образом, json должен быть объявлен как NSArray не NSMutableDictionary.

Это то, что вызывает ошибку компилятора No visible @interface for NSDictionary..., поскольку NSMutableDictionary не имеет метода objectAtIndex:.

Кроме того, код для получения долготы является обратным (он обрабатывает json, как словарь, а затем пытается получить доступ к массиву внутри результирующего значения ключа).

Исправленный код будет:

NSArray *json = [NSJSONSerialization 
          JSONObjectWithData:_responseData 
          options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves 
          error:&error]; 

for (int i = 0; i < json.count; i++) { 

    NSDictionary *pointDictionary = [json objectAtIndex:i]; 

    double latitude = [[pointDictionary objectForKey:@"latitude"] doubleValue]; 
    double longitude = [[pointDictionary objectForKey:@"longitude"] doubleValue]; 

    CLLocationCoordinate2D latlng = CLLocationCoordinate2DMake(latitude, longitude); 

    MKPointAnnotation *point = [[MKPointAnnotation alloc] init]; 
    [point setCoordinate:latlng]; 
    [worldView addAnnotation:point]; 
} 
Смежные вопросы