Как да получите достъп до данни в NSDictionary с objectForKey

Опитвам се да получа достъп до данните в речник. Имам достъп до данните, когато са низ като:

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

но не съм сигурен за синтаксиса за NSNumber:

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

Знам, че използвам NSStrings в кода по-горе, което няма да работи. Как мога да променя това, за да работи с NSNumber?

данните в речника са представени по следния начин. objectForKey е "coords". Искам достъп до артикул 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]; това ми дава резултата като чифт lat и long.   -  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; lng = 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 стойност).

Така че не можете да го направите

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

---ДОБАВЕНО2 Прочетох дневника по-точно. Имате обект с атрибути 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
Речникът е вид обект, но Object не е вид речник. И така, Object != Dictionary. - 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