Comment puis-je créer un Objective-C NSDictionary de NSArrays sans réutiliser le même NSArray?

Longtemps Windows développeur, 1ère fois Objective-C/iPhone développeur veut créer un NSDictionary de NSArrays qui peuvent être affichés dans une plaine UITableView avec alphabétique sections.

La source de ce dictionnaire de tableaux est un tableau contenant les noms des magasins triés par ordre alphabétique:

Apple Store

Atlanta Compagnie De Pain

Les frontières

Build-A-Bear Workshop

Cargill Galerie

Dillards

Dick's Sporting goods

Eddie Baure

FootLocker

GameStop

Heizberg Diamants

LensCrafters

Mcdonald's

Nordstrom

Payless Shoe Source

Pottery Barn

Solstice

Starbucks Coffee

Victoria Secret

White Barn Bougie Co.

Le dictionnaire de tableaux créé à partir de la source devrait ressembler à quelque chose comme ceci (le type de données entre parenthèses):

Racine (Dictionnaire)

....Un (Array)

........Apple Store (String)

........Atlanta Compagnie De Pain (String)

....B (Tableau)

........Frontières (String)

........Build-A-Bear Workshop (String)

....C (Array)

........Cargill Galerie (String)

....D (Array)

........Dillards (String)

........Dick's Sporting goods (String)

....etc.

Un dictionnaire, des tableaux comme la structure ci-dessus remplit la TableView et affiche comme ceci:

Un

Apple Store

Atlanta Compagnie De Pain

B

Les frontières

Build-A-Bear Workshop

C

Cargill Galerie

D

Dillards

Dick's Sporting goods

etc.

Le code que j'ai écrit que crée le dictionnaire de tableaux finit de mettre le dernier magasin (White Barn Bougie Co.) après chaque en-tête de section.

Un

White Barn Bougie Co.

B

White Barn Bougie Co.

C

White Barn Bougie Co.

D

White Barn Bougie Co.

etc.

Je me rends compte de ce qui se passe parce que je réutiliser un tableau temporaire, le remplissant avec les A, il curage, le remplissant avec les B, il curage, etc. Voici le code qui crée le dictionnaire de tableaux à partir de la source matrice.

NSMutableDictionary *places = [[NSMutableDictionary alloc] init];
NSMutableArray *alphaPlace = [[NSMutableArray alloc] init]; 

for (int x = 1; x <= 26; x++) {
    NSString *alphabet = [[NSString alloc] initWithString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
    NSString *letter = [alphabet substringWithRange:NSMakeRange(x - 1, 1)];

    for (NSString *place in allPlaces) {
        NSString *first = [place substringWithRange:NSMakeRange(0, 1)];
        if ([first isEqualToString:letter] == YES) { //Add to alphaPlace
            [alphaPlace addObject:place];
        }
        else { //Add alphaPlace to places, clear out alphaPlace; add new item to alphaPlace
            [places setValue:alphaPlace forKey:letter];
            [alphaPlace removeAllObjects];  //SAME ARRAY BEING USED FOR ALL LETTERS OF ALPHABET!
            [alphaPlace addObject:place];
        }
    }
}

Je me rends compte que je pouvais "force brute" ce par la création de 26 distinctes des tableaux et à l'aide d'une instruction switch pour sélectionner la bonne à remplir mais je ne veux vraiment pas le faire. J'ai pensé que quelqu'un de plus familier avec Objective-C pouvait m'apporter une solution plus élégante.

Merci à l'avance. Laissez-moi savoir si vous avez besoin de plus d'infos.

InformationsquelleAutor billmaya | 2009-09-19