2009-06-14 3 views
0

я использую функцию, чтобы заполнить словарь в массив здесь кодКак получить значения из nsdictionary в iphone?

-(void)getAllFlashCardsNames 
{ 
if ([listofitems count]==0) 
    listofitems = [[NSMutableArray alloc] init]; 
else 
    [listofitems removeAllObjects]; 

for(int i=0;i<listOfCategoryId.count;i++) 
{ 
    int j=[[listOfCategoryId objectAtIndex:i]intValue]; 
    [self getFlashCard:j];  
    NSArray *flashCardsNames = flashCardsNamesList; 
    NSArray *flashCardsids = flashCardsId; 
    NSLog(@"FLash Card Ids %@",flashCardsids);  
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:flashCardsNames,@"flashCards",flashCardsids,@"flashCardId",nil]; 
    [listofitems addObject:dictionary]; 

} 

}

в приведенном выше коде массив flashcardsNamesList, flashCardsId изменяется каждый раз при вызове функции [само getFlashCard: J ]; j является параметром для изменения categoryid, который исходит из массива listOfCategoryId.

теперь как я извлекаю значения из словаря, я хочу показать разные flashcardsNames на разных разделах в uitableview.

здесь код им с помощью для получения значений

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
return [listofitems count]; 

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section { 
    NSDictionary *dictionary =[listofitems objectAtIndex:section]; 
    NSLog(@"dictionary=%@",dictionary); 
    NSArray *array =[dictionary objectForKey:@"flashCards"]; 
    NSLog(@"array=%@",array); 
    NSLog(@"Section Count = %d",array.count); 
    return array.count; 
} 



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 
    CustomCell *cell = (CustomCell *)[tableViewdequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) {  
     cell = [[[CustomCell alloc] initWithFrame:CGRectZero  reuseIdentifier:CellIdentifier] autorelease];  
    } 

    NSDictionary *dictionary =[listofitems objectAtIndex:indexPath.section]; 
    NSArray *array =[dictionary objectForKey:@"flashCards"]; 
    NSArray *array1=[dictionary objectForKey:@"flashCardId"]; 
    NSString *cellValue=[array objectAtIndex:indexPath.row]; 
    NSString *cellValue1=[array1 objectAtIndex:indexPath.row]; 
    [cell.FlashCardsNames setText:cellValue]; 
    [cell setFlashCardId:[cellValue1 intValue]]; 
    return cell; 
} 

но метод - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath не дозвонились

ответ

3

но метод -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath не называется

Вы установили объект, в котором ваш метод реализован, в качестве источника данных в виде таблицы? UITableView передает часть работы другому объекту, который должен соответствовать протоколам UITableViewDataSource и UITableViewDelegate; вы должны затем установить объект как dataSource и delegate в виде таблицы, либо в IB, либо программно (источник данных и делегат могут быть разными объектами, но обычно являются одним и тем же объектом). Взгляните на this article, который объясняет больше об этом; как только это будет сделано, ваш объект должен обрабатывать методы tableView:cellForRowAtIndexPath: и tableView:numberOfRowsInSection:, которые будут вызываться на вашем объекте по представлению таблицы.

Кроме того, линии:

if ([listofitems count]==0) 
    listofitems = [[NSMutableArray alloc] init]; 

не имеют смысла. Я предполагаю, что вы проверяете, был ли выделен массив или нет, а если нет, чтобы выделить его. Если в массиве не было выделено, это будет nil, поэтому отправка count ему не будет иметь никакого эффекта. Если оно было выделено ранее, но освобождено, но не вернулось обратно в nil, это будет плохой указатель и приведет к сбою вашего приложения.

Лучший способ выделить это было бы сделать это в awakeFromNib методе вашего класса, или applicationDidFinishLaunching: метод, если вы реализуете это в UIApplicationDelegate подкласса. Не забудьте выпустить его в своем методе dealloc.

+0

Вы установили объект, в котором реализован ваш метод, в качестве источника данных в виде таблицы? что это значит ??? –

+0

Посмотрите на мое редактирование –

+0

метод tableView: numberOfRowsInSection: метод вызывается, но эта строка возвращает 0 объектов в массиве NSArray * array = [dictionary objectForKey: @ "flashCards"]; Я застрял здесь .. –

Смежные вопросы