如何从iphone中的nsdictionary中检索值?

时间:2009-06-14 10:46:28

标签: iphone objective-c

我正在使用一个函数来填充数组中的字典 这是代码

    -(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每次调用函数时都会改变[self getFlashCard:j]; j是一个更改categoryid的参数,它来自listOfCategoryId数组..

现在如何从字典中检索我想在uitableview的不同部分显示不同flashcardsNames的值。

这是我用来检索值的代码

- (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没有被称为

1 个答案:

答案 0 :(得分:3)

  

但方法-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath未调用

您是否已将实现方法的对象设置为表视图的数据源? UITableView将一些工作交给另一个对象,该对象必须符合UITableViewDataSourceUITableViewDelegate协议;然后,您必须将对象设置为表视图的dataSourcedelegate,在IB中或以编程方式设置(数据源和委托可以是不同的对象,但通常是相同的对象)。看看this article,它解释了更多关于它的内容;完成此操作后,您的对象必须处理tableView:cellForRowAtIndexPath:tableView:numberOfRowsInSection:方法,这些方法将在表格视图的对象上调用。

另外,行:

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

没有意义。我假设您正在检查数组是否已分配,如果没有,则分配它。如果数组尚未已分配,则它将为nil,因此向其发送count无论如何都不会产生任何影响。如果先前已分配,但已取消分配但还原为nil,则它将是一个错误的指针并导致应用程序崩溃。

分配它的更好方法是在您的班级的awakeFromNib方法或applicationDidFinishLaunching:方法中执行此操作,如果您在UIApplicationDelegate子类中实现此方法。不要忘记在dealloc方法中发布它。