2010-02-16 4 views
31

У меня есть NSDictionary, который выглядит следующим образом:NSDictionary для NSArray?

{ 
"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 держит пустой? Что я делаю не так?

ответ

27

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

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

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

+2

Я знаю, что это старый пост, но сэр, вы догадались мои мысли! – Bogdan

2

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

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

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

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

+0

Нет, myDict не пример, показанный выше, он должен показать вам, что у меня есть NSDictionary из NSDictionarys. Как я могу проверить, являются ли мои объекты NSNumbers? – phx

+0

Извините, я виноват! Я неправильно использую addObject. Я хочу добавить объекты NSDictionarys в свой массив! Поэтому я должен сделать это по-другому! – phx

221
NSArray * values = [dictionary allValues]; 
+0

Привет, Я хочу добавить объекты в массив, а не только значения. – phx

+24

Если вы прочитали документацию, 'allValues' возвращает каждый объект, который будет возвращен вызовом' objectForKey: 'для каждого ключа в словаре. –

+3

Если вы хотите добавить больше объектов, вам нужно, чтобы сделать это NSMutableArray так: '* Значения NSMutableArray = [[NSMutableArray Alloc] initWithArray: [словарь allValues]];' –

0

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

NSMutableArray *yourArray = [NSMutableArray arrayWithCapacity:6]; 
[yourDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
    [yourArray addObject:obj]; 
}]; 
42
NSArray *keys = [dictionary allKeys]; 
NSArray *values = [dictionary allValues]; 
+0

Эти два варианта позволят вам разделить ключи и значения NSDictionary на два отдельных NSArrays. Очень полезно. –

5

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

NSArray *aValuesArray = [yourDict allValues]; 
3

Код Snippet1:

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

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

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

и так далее

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

NSArray *keys = [dictionary allKeys]; 
1

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

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

работал для меня! благодаря :) –

0

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

В Swift 4:

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

let array = Array(dict.values) 
Смежные вопросы