2014-11-04 3 views
0

NSDictionary을 정의 할 때 키 - 값 쌍의 위치를 ​​어떻게 보장 할 수 있습니까? 예를 들어 NSDictionary 리터럴이 런타임에 위치

내가 정의하는 경우 : 실행시 다음
[detailsView setDatasource: @[ 
    @[@"Details", 
     @{ @"title_1":@"description1", 
     @"title_2":@"description2", 
     @"title_3":@"description3", 
     @"title_4":@"description4" }], 
    @[@"Actions", 
     @{ @"Action_1":[NSNull null], 
     @"Action_2":[NSNull null], 
     @"Action_3":[NSNumber numberWithBool:false] }] 
]; 

내가 리터럴을 초기화하는 경우는 NSDictionary가 초기화되는 방법 항목

[detailsView setDatasource: @[ 
    @[@"Details", 
     @{ @"title_2":@"description2", 
     @"title_3":@"description3", 
     @"title_4":@"description4", 
     @"title_1":@"description1" }], 
    @[@"Actions", 
     @{ @"Action_3":[NSNumber numberWithBool:false], 
     @"Action_1":[NSNull null], 
     @"Action_2":[NSNull null]}] 
]; 

이 문제가 예측할 수 ... 의 다른 순서를

리터럴을 사용할 때 키 - 값 쌍이 정의 된 위치에 있는지 확인하는 방법이 있습니까?

- 편집 -

아니 확실한 해결책은 있지만 작동합니다. 내가 종료 업이 같은 일을 :

@[ 
    @[ @"Route details", 
     @[ 
       @[@"route-direction", @"Route direction", [NSString stringWithFormat:@"%@ → %@", journey[@"from"], journey[@"to"]]], 
       @[@"poi-count", @"Points of interest", journey[@"pois-count"]], 
       @[@"date-created", @"Date created", journey[@"created-at"]], 
      ] 
    ], 
    @[ @"Actions" , 
     @[ 
      @[@"favourite", @"Favourite", ([journey objectForKey:@"favourite"] ? [journey objectForKey:@"favourite"] : [NSNumber numberWithBool:false])], 
      @[@"load",@"Load now",[NSNull null]], 
      @[@"delete",@"Delete",[NSNull null]], 
      ] 
    ], 
[NSNumber numberWithInteger: indexPath.row]]]; 
+0

당신만큼 당신이 _keys_에 의해 _values_에 액세스하므로 아무 소용도하지 않습니다 질문 도움이 될 수있는, 다른 배열 값

희망을 유지 한 배열 키를 유지하는 대신있는 NSDictionary의 NSArray를를 사용 ('-valueForKey :'또는'-valueForKeyPath :'), 요소의 실제 순서는 실제로는 무의미합니다. 어쨌든 당신은 무엇을 얻고 싶습니까? – holex

+0

다른 tableViews에서 선택한 항목마다 다른 속성 및 동작을 표시하는 ViewController가 필요했습니다. 속성과 값을 설정 한 다음 선택기 이름을 사용하여 해당 항목에 사용할 수있는 작업을 설정합니다. 액션에 대해서는 모든 액션 후에 "삭제"액션을 표시해야 할 수도 있습니다. – slava

답변

0

NSDictionary에 당신이 그것을 사용하십시오 주문 container.If하지, 당신은 데이터의 순서를 신경 쓰지한다. 당신이 주문한 사전을 원하는 경우

은이 링크

http://www.cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html

를 참조하거나이있는 NSDictionary의 키 순서를 유지하기 위해 다른 NSArray/NSMutableArray을 쓸 수 있습니다.

하거나이

+0

고마워, 그게 유용했다 ... 나는 NSDictionary 대신에 2 차원 NSArray를 사용하기로 결정했다. 이런 식으로 나는 "행동 이름", "행동 제목", "행동 가치"를 갖는 문제를 해결했다. – slava

+0

@slava 룩업 속도가 저하됩니다. – trojanfoe

+0

@trojanfoe 가능하지만 6 개 항목 만 사용하고 있습니다. 나는 그것이 비효율적 인 코드를 작성하는 핑계가 아니라는 것을 알고 있지만, 평범한 C 배열을 사용하면 될까요? 방법? 속성 값 목록 및 작업 (선택한 항목)을 표시하는 테이블이있는 ViewController에 대한 데이터 소스를 설정하려고합니다. – slava