2013-09-24 5 views
4

Objective-C에서 외부 사전의 내부 사전에 직접 액세스 할 수 있습니까? 예를 들어, 내부 사전의 일부인 객체에 키가 있습니다. 해당 키에서 객체에 직접 액세스 할 수있는 방법이 있습니까?중첩 된 NSDictionary의 개체 액세스

GameDictionary { 
    Indoor_Game = { "game1" = chess; "game2" = video_Game; "game3" = poker; }; 
    OutDoor_Game = { "game4" = cricket; "game5" = hockey; "game6" = football; }; 
}; 

내가 "game4"키를 가지고,하지만 난 현재 내가 개체에 대한 각 사전에서 검색해야이 키의 사전 객체가 존재하는 모르는, 내가 사용하고있는 코드는 다음과 같습니다

NSString* gameName = nil; 
NSString* gameKey = @"game4"; 
NSArray* gameKeys = [GameDictionary allKeys]; 
for (int index = 0; index < [gameKeys count]; index ++) { 
    NSDictionary* GameType = [GameDictionary objectForKey:[gameKeys objectAtIndex:index]]; 
    if ([GameType objectForKey:gameKey]) { 
    gameName = [GameType objectForKey:gameKey]; 
    break; 
    } 
} 

for 루프 대신 for 내부 사전에 직접 액세스 할 수있는 쉬운 방법입니다.

답변

6

valueForKeyPath는 원하는 것처럼 보입니다. 수집 작업에

[GameDictionary valueForKeyPath:@"OutDoor_Game"] 
//would return a dictionary of the games - "game4" = cricket; "game5" = hockey; "game6" = football; 

[GameDictionary valueForKeyPath:@"OutDoor_Game.game4"] 
//would return cricket 

https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/KeyValueCoding/Articles/CollectionOperators.html

+0

당신은 같은 전체 경로가 필요합니다 - "OutDoor_Game.game4"를,하지만 난 "game4"입니다 절반 경로를 가지고있다. – Mayur

+1

@Mayur 당신이 통제하는 데이터 구조입니까? 보다 나은 재사용을 위해 다시 작업하는 것이 좋습니다. 다음과 같습니다. http://pastebin.com/xUCmGq4c –