web-dev-qa-db-fra.com

NSDictionnaire à NSArray?

j'ai un NSDictionary qui ressemble à:

{
"Item1" = 2.4;
"Item2" = 5.5;
"Item3" = 15.6;
}

Pour utiliser ce NSDictionary éléments dans une vue tabulaire, je dois le transférer vers un NSArray, ai-je raison?

Alors j'essaye:

NSDictionary *dict = [myDict objectForKey:@"items"];

for (id item in dict) {
    [_myArray addObject:[dict objectForKey:item]];
}

Mais _myArray reste vide? Qu'est-ce que je fais mal?

34
phx

En laissant de côté les problèmes techniques avec le code que vous avez publié, vous avez demandé ceci:

Pour utiliser ces éléments de dictionnaire dans une vue de tableau, je dois le transférer vers un NSArray, ai-je raison?

La réponse à cette question est: pas nécessairement. Il n'y a rien d'intrinsèque dans la machinerie de UITableView, UITableViewDataSource ou UITableViewDelegate qui signifie que vos données doivent être dans un tableau. Vous devrez implémenter diverses méthodes pour indiquer au système combien de lignes se trouvent dans votre table et quelles données apparaissent dans chaque ligne. Beaucoup de gens trouvent qu'il est beaucoup plus naturel et efficace de répondre à ces questions avec une structure de données ordonnée comme un tableau. Mais il n'y a pas exigence que vous le fassiez. Si vous pouvez écrire le code pour implémenter ces méthodes avec le dictionnaire avec lequel vous avez commencé, n'hésitez pas!

29
Sixten Otto
NSArray * values = [dictionary allValues];
222
Dave DeLong
NSArray *keys = [dictionary allKeys];
NSArray *values = [dictionary allValues];
43
Nikhil Dinesh

Vous pouvez créer un tableau de tous les objets à l'intérieur du dictionnaire, puis l'utiliser comme source de données pour TableView.

NSArray *aValuesArray = [yourDict allValues];
5
RandomGuy

Extrait de code1:

NSMutableArray *array = [[NSMutableArray alloc] init];
NSArray * values = [dictionary allValues];
[array addObject:values];

Code Snippet2: Si vous souhaitez ajouter plus

[array addObject:value1];
[array addObject:value2];
[array addObject:value3];

Etc

Vous pouvez également stocker les valeurs clés du dictionnaire dans le tableau

NSArray *keys = [dictionary allKeys];
3
Yogeesh H T

Il y a quelques choses qui pourraient se produire ici.

Le dictionnaire que vous avez répertorié est-il le myDict? Si c'est le cas, vous n'avez pas d'objet avec une clé de @"items", et la variable dict sera nulle. Vous devez parcourir directement myDict.

Une autre chose à vérifier est de savoir si _myArray est une instance valide d'un NSMutableArray. S'il est nul, le addObject: la méthode échouera silencieusement.

Et une dernière chose à vérifier est que les objets à l'intérieur de votre dictionnaire sont correctement enfermés dans NSNumbers (ou un autre type non primitif).

2
Matt B.
+ (NSArray *)getArrayListFromDictionary:(NSDictionary *)dictMain paramName:(NSString *)paramName
{
    if([dictMain isKindOfClass:[NSDictionary class]])
    {
        if ([dictMain objectForKey:paramName])
        {
            if ([[dictMain objectForKey:paramName] isKindOfClass:[NSArray class]])
            {
                NSArray *dataArray = [dictMain objectForKey:paramName];

                return dataArray;
            }
        }
    }
    return [[NSArray alloc] init];
}

J'espère que cela t'aides!

1

Vous avez juste besoin d'initialiser votre NSMutableArray

NSMutableArray  *myArray = [[NSMutableArray alloc] init];
1
AP Singh

Ce code est en fait utilisé pour ajouter des valeurs aux dictionary et through les données à un Array selon le Key.

NSMutableArray *arr = [[NSMutableArray alloc]init];
NSDictionary *dicto = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Hello",@"StackOverFlow",@"Key1",@"StackExchange",@"Key2", nil];
NSLog(@"The dictonary is = %@", dicto);
arr = [dicto valueForKey:@"Key1"];
NSLog(@"The array is = %@", arr);
1
onCompletion

Pour obtenir tous les objets dans un dictionnaire, vous pouvez également utiliser enumerateKeysAndObjectsUsingBlock: ainsi:

NSMutableArray *yourArray = [NSMutableArray arrayWithCapacity:6];
[yourDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [yourArray addObject:obj];
}];
0
pixelfreak

Dans Swift 4:

let dict = ["Item1":2.4, "Item2": 5.4, "Item3" : 6.5]

let array = Array(dict.values)
0
Ankit garg