Подтвердить что ты не робот

NSDictionary для NSArray?

i имеет 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 остается пустым? Что я делаю неправильно?

4b9b3361

Ответ 1

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

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

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

Ответ 2

NSArray * values = [dictionary allValues];

Ответ 3

NSArray *keys = [dictionary allKeys];
NSArray *values = [dictionary allValues];

Ответ 4

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

NSArray *aValuesArray = [yourDict allValues];

Ответ 5

Код Snippet1:

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

Код Snippet2: Если вы хотите добавить еще

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

И так далее

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

NSArray *keys = [dictionary allKeys];

Ответ 6

Есть несколько вещей, которые могут произойти здесь.

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

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

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

Ответ 7

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

NSMutableArray  *myArray = [[NSMutableArray alloc] init];

Ответ 8

Чтобы получить все объекты в словаре, вы также можете использовать enumerateKeysAndObjectsUsingBlock: следующим образом:

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

Ответ 9

Этот код фактически используется для добавления значений в 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);

Ответ 10

В Swift 4:

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

let array = Array(dict.values)