Как получить доступ к данным в NSDictionary с помощью objectForKey

Я пытаюсь получить доступ к данным в словаре. Я могу получить доступ к данным, когда это строка типа:

cell.textLabel.text = [[item objectForKey:@"merchant"]objectForKey:@"name"];

но я не уверен в синтаксисе для NSNumber:

NSNumber* latFromTable = [[displayItems objectAtIndex:indexPath.row]
                                           [objectForKey:@"coords"]objectForKey:@"lat"];

Я знаю, что использую NSStrings в приведенном выше коде, который не будет работать. Как бы я изменил это, чтобы работать с NSNumber?

данные в словаре представлены следующим образом. objectForKey — это «координаты». Я хочу получить доступ к пункту 1 и 2 (широта и долгота)

 "coords": {
        "lat": 52.5032,
        "lng": 13.3445

спасибо за любую помощь.


person hanumanDev    schedule 14.11.2012    source источник
comment
Я не уверен, что не так с кодом, который у вас есть сейчас. Вы используете NSStrings для ключей, потому что ключи являются NSStrings; вы возвращаете NSNumber. Вы получаете сообщение об ошибке или странный результат?   -  person chapka    schedule 14.11.2012
comment
Обычно NSNumber отлично работает с NSDictionarys. Ваш код должен работать из того, что я вижу до сих пор. Однако в целом может быть целесообразно сначала получить объекты типа id, а затем проверить, являются ли они нулевыми или относятся к классу NSDictionary или классу NSNumber.   -  person Hermann Klecker    schedule 14.11.2012
comment
NSNumber* latFromTable = [[displayItems objectAtIndex:indexPath.row] objectForKey:@coords]; это дает мне результат как пару широты и долготы.   -  person hanumanDev    schedule 14.11.2012
comment
Очевидно, что вы получили не NSNumber, а скорее NSDictionary (содержащий два NSNumbers).   -  person Hot Licks    schedule 14.11.2012
comment
да это правильно! Я обращался к каждому по отдельности с помощью: NSString *latStr = [latlon objectForKey:@lat];   -  person hanumanDev    schedule 14.11.2012


Ответы (3)


Проблема со следующим кодом - несоответствие скобок:

NSNumber* latFromTable = [[displayItems objectAtIndex:indexPath.row]
                                           [objectForKey:@"coords"]objectForKey:@"lat"];

Поэтому измените его так:

float latFromTable = (float)[[[displayItems objectAtIndex:indexPath.row]
                                           objectForKey:@"coords"]objectForKey:@"lat"];
NSNumber *value = [NSNumber numberWithFloat:latFromTable];
person Midhun MP    schedule 14.11.2012
comment
Благодарность! Я попробовал это, и я получаю ошибку необъявленного идентификатора objectAtKey. для обоих. - person hanumanDev; 14.11.2012
comment
Пожалуйста, NSLog (@%@,[[displayItems objectAtIndex:indexPath.row] [objectForKey:@coords]]); Каков результат? - person Midhun MP; 14.11.2012
comment
Я обнаружил, что если я использую: NSNumber* latlonFromTable = [[displayItems objectAtIndex:indexPath.row] objectForKey:@coords]; Я получаю lat lon{ lat = 52.5032; длина = 13,3445; } вошли в консоль. Благодарность! - person hanumanDev; 14.11.2012

Попробуйте это так:

float latFromTable = [[[displayItems objectForIndex:indexPath.row]
                                       [objectForKey:@"coords"]objectForKey:@"lat"] floatValue];
person schubam    schedule 14.11.2012

Пара ключ-значение в словаре называется записью. Каждая запись состоит из одного ОБЪЕКТА, представляющего ключ, и второго ОБЪЕКТА, являющегося значением этого ключа.

NSInteger не является объектом (это просто значение int).

Значит, ты не можешь этого сделать

--- ДОБАВЛЕНО Как предложил Шубам, вы можете получить NSString и вызвать floatValue.

---ADDED2 Я более точно прочитал лог. У вас есть объект с атрибутами lat и long. Так что это не словарь второго уровня. Попробуйте получить имя интерфейса и получить объект этого интерфейса.

person Ivan Surzhenko    schedule 14.11.2012
comment
Нет, вы получите NSNumber и вызовете floatValue. - person Hot Licks; 14.11.2012
comment
Я прочитал журнал более точно. У вас есть объект с атрибутами lat и long. Так что это не словарь второго уровня. Попробуйте получить имя интерфейса и получить объект этого интерфейса. добавлю в ответ - person Ivan Surzhenko; 14.11.2012
comment
Объект и словарь — это одно и то же. - person Hot Licks; 14.11.2012
comment
Словарь — это своего рода объект, но Объект — это не словарь. Итак, Объект != Словарь. - person Ivan Surzhenko; 15.11.2012
comment
Кроме того, вы можете просмотреть ссылка. Нет никакого objectForKey или т. д. Но, похоже, вы правы с NSNumber. Он имеет floatValue. - person Ivan Surzhenko; 15.11.2012
comment
Иван, то, что является объектом на языке JSON, является словарем в Objective-C и большинстве других языков. - person Hot Licks; 15.11.2012