вставить объект в NSMutablearray NSDictionary - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь вставить объект в массив NSDictionary, но не могу узнать, как.все примеры показывают, как вставить в массив с NSDictionary с помощью insertObject: atIndex, но этот не вставляет объект под ключом словаря.

Мой массив сейчас выглядит следующим образом:

NSArray *aaa = [NSArray arrayWithObjects:@"Disable" ,nil];
NSDictionary *aaaDict = [NSDictionary dictionaryWithObject:aaa forKey:@"Computers"];
NSArray *bbb = [NSArray arrayWithObjects:@"Enable", nil];
NSDictionary *bbbDict = [NSDictionary dictionaryWithObject:bbb forKey:@"Computers"];
NSArray *ccc = [NSArray arrayWithObjects:@"Enable", nil];
NSDictionary *cccDict = [NSDictionary dictionaryWithObject:ccc forKey:@"Computers"];

[listOfItems addObject:aaaDict];
[listOfItems addObject:bbbDict];
[listOfItems addObject:cccDict];

Я бы хотел сделать это, но с ключом «Компьютеры»:

   NSArray *ar = [NSArray arrayWithObjects:@"xxxx", @"yyyy", @"zzzz", nil];
    NSDictionary *arDict = [NSDictionary dictionaryWithObject:ar forKey:@"Computers"];
    [listOfItems insertObject:ar atIndex:1];

Опять - этодобавляет новый массив, но не под ключом «Компьютеры».Что мне здесь не хватает?

Спасибо!

Ответы [ 5 ]

3 голосов
/ 04 августа 2011

Вы, вероятно, хотели написать
[listOfItems insertObject:arDict atIndex:1];
вместо
[listOfItems insertObject:ar atIndex:1];

Вы добавляете массив, а не словарь, как в первой части вашего вопроса.

1 голос
/ 04 августа 2011

Вы хотите добавить еще один массив в словарь внутри массива listOfItems?Если это так, он требует вызова вложенного метода как такового:

[[listOfItems objectAtIndex:0] setObject:ar forKey:@"Computers"];
1 голос
/ 04 августа 2011

Не уверен, что точно понимаю, что вы пытаетесь сделать, но вы хотели вставить объект ar или объект arDict?Я думаю, что ваш код должен выглядеть как

NSArray *ar = [NSArray arrayWithObjects:@"xxxx", @"yyyy", @"zzzz", nil];
NSDictionary *arDict = [NSDictionary dictionaryWithObject:ar forKey:@"Computers"];
[listOfItems insertObject:arDict atIndex:1];
0 голосов
/ 05 августа 2011

с исправленной утечкой

NSArray *ar = [NSArray arrayWithObjects:@"xxxx", @"yyyy", @"zzzz", nil];
NSDictionary *arDict = [NSDictionary dictionaryWithObject:ar forKey:@"Computers"];
[listOfItems insertObject:arDict atIndex:1];
[ar release]; // fixed the leak
[arDict release];  // fixed the leak
0 голосов
/ 04 августа 2011

Когда он добавляет новый объект, вы должны сначала получить NSDictionary. Так что в основном вы используете словарь неправильно. То, что вы сделали, эквивалентно

[listOfItems addObject:aaa]; и аналогично bbb, ccc и ar

Что вы на самом деле хотите сделать, так это добавить объекты в словарь, а не в массив.

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary addObject:[NSArray arrayWithObjects:@"Disable" ,nil] forKey:@"Key1"]; // your keys need to be unique
[dictionary addObject:[NSArray arrayWithObjects:@"Enable", nil] forKey:@"Key2"];
[dictionary addObject:[NSArray arrayWithObjects:@"Enable", nil] forKey:@"Key3"];

[dictionary addObject:[NSArray arrayWithObjects:@"xxxx", @"yyyy", @"zzzz", nil] forKey:@"Key4"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...