문제

속성 목록에 몇 가지 사전이 있습니다.이 게임의 메뉴 시스템을 구성합니다.

New game
    Easy
    Normal
    Hard
Load game
    Recent
    Older
Options
    Game
    Sound

이 목록의 각 항목은 사전입니다.

이 메뉴 시스템을 표시하기 위해 uinavigationcontroller 및 uitableviews를 사용합니다. 항목이 선택되면 선택한 항목의 항목과 함께 새로운 uitableviewcontroller가 Uinavigationcontroller에서 푸시됩니다. Exmaple의 경우 첫 번째 UitableView에는 사전에 "새 게임", "로드 게임"및 "옵션"이 포함되어 있습니다. 사용자가 옵션을 선택하면 "Game"및 "Sound"항목으로 새로운 UitableViewController가 생성됩니다 (즉, "옵션"사전).

나는 이런 식으로 Uitableview를 채 웁니다.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] init] autorelease];
    }

    // Set up the cell...

    cell.text = [[[data keyEnumerator] allObjects] objectAtIndex:indexPath.row];

    // Data is the dictionary..

    return cell;
}

그러나 분명히, 이는 품목이 속성 목록에 정의 된 것과 동일한 순서로 오지 않도록합니다.

내가하려는 일을 할 때 질서를 보존하는 방법을 아는 사람이 있습니까?

감사.

도움이 되었습니까?

해결책

사전은 질서를 보존하지 않습니다. 배열을 사용해야합니다. 대신 배열을 사용할 수 있습니다 (예에서 사전이 필요한 이유는 없음) 또는 사전을 색인화하는 배열을 만들 수 있습니다.

따라서 지금 가지고있는 사전부터 시작하여 배열을 만들고 사전을 통과하고 사전 값을 사전의 키로 설정하십시오.

그래서 당신의 사전이 이것처럼 보였다면

Game Types
    easy: Easy
    normal: Normal
    hard: Hard

배열은 다음과 같습니다 : [ "easy", "normal", "hard"] (이 중 어느 것도 객관적인 c 코드는 아닙니다). 그런 다음 다음 줄을 사용할 수 있습니다.

[myDictionary objectForKey:[myArray objectAtIndex: indexPath.row]]

다른 팁

사전은 질서를 보존하기 위해 의지해서는 안됩니다. 그것이 배열의 요점입니다.

제목과 옵션 목록이있는 사전 객체 배열이 필요합니다.

NSArray *options = [NSArray arrayWithObjects:@"Easy",@"Normal",@"Hard",nil];

NSDictionary *newGame = [[[NSDictionary alloc] initWithObjectsAndKeys:@"New game", @"title", options, @"options",nil]autorelease];

최상위 테이블에는 각 하위 페이지의 제목이 표시되며 각 하위 페이지에는 옵션 테이블이 표시됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top