NSDictionary для NSArray? - PullRequest
       26

NSDictionary для NSArray?

34 голосов
/ 16 февраля 2010

У меня есть NSDictionary, который выглядит как:

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

Чтобы использовать это NSDictionary элементов в табличном представлении, я должен передать его в NSArray, я прав?

Итак, я стараюсь:

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

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

Но _myArray держит пустым? Что я делаю не так?

Ответы [ 11 ]

222 голосов
/ 16 февраля 2010
NSArray * values = [dictionary allValues];
43 голосов
/ 25 апреля 2012
NSArray *keys = [dictionary allKeys];
NSArray *values = [dictionary allValues];
29 голосов
/ 16 февраля 2010

Оставляя в стороне технические проблемы с кодом, который вы разместили, вы спросили:

Чтобы использовать этот словарь в табличном представлении, я должен передать его в NSArray, я прав?

Ответ на который: не обязательно. Ничто не присуще машинам UITableView, UITableViewDataSource или UITableViewDelegate, что означает, что ваши данные должны находиться в массиве. Вам нужно будет реализовать различные методы, чтобы сообщить системе, сколько строк в вашей таблице и какие данные отображаются в каждой строке. Многие люди находят более естественным и эффективным ответ на эти вопросы с упорядоченной структурой данных, такой как массив. Но нет требования , что вы делаете это. Если вы можете написать код для реализации этих методов с помощью словаря, с которого вы начали, не стесняйтесь!

5 голосов
/ 14 февраля 2014

Вы можете создать массив всех объектов внутри словаря и затем использовать его в качестве источника данных для TableView.

NSArray *aValuesArray = [yourDict allValues];
3 голосов
/ 18 ноября 2014

Фрагмент кода1:

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

Фрагмент кода2: Если вы хотите добавить еще

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

и т. Д.

Также вы можете хранить ключевые значения словаря в массиве

NSArray *keys = [dictionary allKeys];
2 голосов
/ 16 февраля 2010

Здесь может произойти несколько вещей.

Является ли указанный вами словарь списком myDict? Если это так, то у вас нет объекта с ключом @"items", а переменная dict будет равна нулю. Вам нужно перебрать myDict напрямую.

Еще одна вещь, которую нужно проверить, это то, является ли _myArray допустимым экземпляром NSMutableArray. Если это ноль, метод addObject: молча завершится ошибкой.

И последнее, что нужно проверить, - это то, что объекты внутри вашего словаря должным образом заключены в NSNumbers (или в некоторый другой непримитивный тип).

1 голос
/ 08 мая 2018
+ (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];
}

Надеюсь, это поможет!

1 голос
/ 07 сентября 2015

Этот код фактически используется для добавления значений к dictionary и through данных к Array Согласно 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 голос
/ 24 апреля 2015

Вам просто нужно инициализировать NSMutableArray

NSMutableArray  *myArray = [[NSMutableArray alloc] init];
0 голосов
/ 12 октября 2017

В Swift 4:

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

let array = Array(dict.values)
...