2012-01-03 2 views
0

Я хотел бы знать, как получить значение из NSMutableArray с ключами. Массив построен так:iPhone: как получить значение из NSMutable Array с ключами

qtype = [[NSMutableArray alloc] init]; 
    while (dicjson = (NSDictionary*)[enumerator nextObject]) { 
    question_id = [dicjson objectForKey:@"question_id"];   
    question_text = [dicjson objectForKey:@"question_text"]; 
    question_type = [dicjson objectForKey:@"question_type"]; 

    [qtype addObject:[NSDictionary dictionaryWithObject:question_type forKey:question_id]]; 

} 

Я наполнение массива в ячейке таблицы:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSString *type = [qtype objectAtIndex:[indexPath row]]; 

} 

однако выход, как «65 = YN», который является не то, что я хочу. Я хотел бы извлечь только «65». Если бы вы могли дать мне некоторую идею, было бы очень признательно.

+0

Я считаю, что это невозможно в NSMutableArray. NSMutableDictionary сделает это. –

ответ

0

Это потому, что вы храните NSDictionary в «qtype». Попробуйте:

NSDictionary *dict = [qtype objectAtIndex:[indexPath row]]; 
NSString *type = [[dict allValues] lastObject];//since you have only one object stored. 
1

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

Во всяком случае, в tableView:cellForRowAtIndexPath:, изменить код, чтобы получить единственный ключ (который является вопрос ИН) в словаре:

-(UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSArray *dictKeys = [[qtype objectAtIndex:[indexPath row]] allKeys]; 
    NSString *type = [dictKeys objectAtIndex:0]; 
} 
1

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

qtype = [[NSMutableArray alloc] init]; 
while (dicjson = (NSDictionary*)[enumerator nextObject]) { 
question_id = [dicjson objectForKey:@"question_id"];   
question_text = [dicjson objectForKey:@"question_text"]; 
question_type = [dicjson objectForKey:@"question_type"]; 

[qtype addObject:question_id]; 

} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSString *type = [qtype objectAtIndex:[indexPath row]]; 

} 

Но если вам нужно qtype для других целей, вы можете получить

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *dict = [qtype objectAtIndex:[indexPath row]]; 
    NSString *type = [[dict allKeys] objectAtIndex:0]; 

} 
+0

Спасибо, это работает для меня. Мне нужно сделать это так, потому что он читает json-код с сервера. – user973067

0

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

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *dict = [qtype objectAtIndex:[indexPath row]]; 
    NSString *question_id = [dict objectForKey:@"question_id"];  
    NSString *question_text = [dict objectForKey:@"question_text"]; 
    NSString *question_type = [dict objectForKey:@"question_type"]; 
} 
Смежные вопросы