NSdictionary объект в plist должен быть массив массивов, как конвертировать? - PullRequest
2 голосов
/ 28 июня 2010

У меня есть словарь .plist, в котором есть подмассив, однако при преобразовании в Json он преобразуется в массив. Элемент «профиль» на изображении ниже, как вы можете видеть, это словарь, как мне программно превратить преобразование в массив »:

альтернативный текст http://www.baublet.com/images/dict2.png

Мне бы также хотелось, чтобы элементы в словаре имели Элемент 0, Элемент 1 и т. Д., Чтобы он выглядел как завершенный, чтобы я мог использовать его в развернутом UItable.

альтернативный текст http://www.baublet.com/images/array4.png

Спасибо за отзыв по вопросу, я его переработал.

Michael

Ответы [ 4 ]

0 голосов
/ 29 июня 2010

Предполагая, что вы инициализируете items как NSMutableArray, следующий способ будет самым простым способом справиться с этим:

NSDictionary *profile;
NSArray *pArray;
for (NSMutableDictionary *anItem in items) {
    profile=[anItem valueForKey:@"profile"];
    pArray=[NSArray arrayWithObjects:[profile valueForKey:@"car"],[profile valueForKey:@"color"],[profile valueForKey:@"make"],nil];
    [anItem setValue:pArray forKey:@"profile"];
}

Это обеспечит постоянный порядок создаваемого массива.

Я должен сказать, однако, что я думаю, что вы очень редко сталкиваетесь с ситуацией, когда вам нужно преобразовать вложенный словарь в массив. Вам, конечно, не нужно делать это для просмотра таблицы.

0 голосов
/ 28 июня 2010

Щелкните значение «Словарь» в столбце «Тип» и измените его на «Массив».

0 голосов
/ 28 июня 2010

Чтобы отбросить ключи словаря и просто получить значения, используйте allValues.

0 голосов
/ 28 июня 2010

Учитывая, что словарь содержит серию пар ключ / значение, неясно, что вообще означает превращение его в массив.Кроме того, вы еще не сказали, что вы хотите сделать с массивом.

Вы хотите только значения?Вам нужны они в ключе, значении, ключе, порядке значений?Они должны быть в каком-то порядке?Вы хотите, чтобы массив заменил словарь?Вам нужен сам массив?

Учитывая степень перезаписи, которую вы делаете, я бы предложил создать контейнер - NSMutableDictionary или NSMutableArray, в зависимости от ситуации - и затем пройтись по существующему контейнеру, вставляя новые элементы в изменяемый контейнер в любой нужной форме.

Было бы просто использовать for (... in ...) для перечисления словарей и массивов.

Пока вы продолжаете использовать строковые значения, найденные в оригинале - нет причин копировать их- тогда использование памяти не будет ужасно вопиющим.

Соответствующая документация:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Collections/Collections.html#//apple_ref/doc/uid/10000034i

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html#//apple_ref/doc/uid/10000048i

...