从tableview单元格中的plist显示数组的问题

时间:2011-08-23 07:29:05

标签: iphone objective-c ios uitableview plist

我想在我的Stages dict中阅读并显示我的数组到tableview中。但是,我的应用程序崩溃并提供错误消息: * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__ NSCFDictionary objectAtIndex:]:无法识别的选择器发送到实例0x4b43ee0'

我能够在Stages dict中显示数组的行数,但无法在表格单元格中显示名称。

下面是我的plist和代码。

  

Root(数组)

 Item 0 (Dict)
        Project Name (String)
        Stage (Dict)
                Analysis (Array)
                Design (Array)
                Develop (Array)
                Implement (Array)

在我的viewDiDLoad方法中,我调用了

    //course is a nsdictionary which is pass down from the previous view
    stages = [course objectForKey:@"Stage"];

tableview方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSInteger rows = 0;

if (section == 0){
    rows = 1;
}

if (section == 1) {
    return [stages count];
}
return rows;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *MyIdentifier = @"StagesCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil) {      
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 
}   
// Set up the cell

if (indexPath.section == 0) {
    if (indexPath.row == 0) {
        cell.textLabel.text = @"Project Name";
        cell.detailTextLabel.text = [course objectForKey:@"ProjectName"];;
    } 
}

if (indexPath.section == 1) {
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;   

    NSString *cellvalue = [stages objectAtIndex:indexPath.row];     
    cell.textLabel.text = cellvalue;
}   
return cell;
    }

提前致谢(:

3 个答案:

答案 0 :(得分:0)

在plist文件中,项目名称变量如下所示:Project Name,在此行中显示cell.detailTextLabel.text = [course objectForKey:@"ProjectName"];;,如下所示:ProjectName。我认为两者都必须相同。也许这只出现在这里。

出现错误是因为stage变量是一个字典,您可以在PList文件中看到,但是您尝试将其用作数组。我看到阶段字典包含4个键:分析,设计,开发,设计(奇怪,字典中的相同键???)。因此,您必须首先使用- (id)objectForKey:(id)aKey;方法,使用Stages字典中的一个键,然后使用objectAtIndex:方法。

答案 1 :(得分:0)

stages元素是字典,而不是数组。我猜测字典中的每个元素都是数组对象,并且您希望在表视图中显示键。

此外,给出的plist似乎与示例不符。您在标有“课程”的词典中指定了Stage,但在plist中,它会显示Stages

也许您想尝试:

stages = [[course objectAtIndex:@"Stages"] allKeys];

答案 2 :(得分:0)

NSString *cellvalue = [stages.allValues objectAtIndex:indexPath.row];

注意“allValues”。 allValues返回字典中所有值的数组, allKeys返回字典中所有键的数组。