2011-08-23 113 views
0

我想在我的階段代碼中讀取和顯示我的數組到tableview中。由於未捕獲的異常「NSInvalidArgumentException」,原因*終止應用程序:但是,我的應用程序崩潰,並給予該錯誤信息「 - [__ NSCFDictionary objectAtIndex:]:無法識別的選擇發送到實例0x4b43ee0」顯示數組從plist在tableview單元格中的問題

我能夠顯示階段中數組的行數,但不能在表格單元格內顯示名稱。

下面是我的plist和代碼。

根(陣列)

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; 
    } 

預先感謝(:

回答

0

stages元素是一個字典,而不是一個數組。我在猜測字典中的每個元素都是數組對象,並且您想要在表視圖中顯示這些鍵。

此外,給出的plist似乎不符合該示例。然後在標有 '課程' 字典指定Stage,但在plist中,它顯示Stages

也許你也想嘗試:

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

在您的plist文件中,項目名稱變量如下所示:Project Name並在此行中:cell.detailTextLabel.text = [course objectForKey:@"ProjectName"];;它看起來像這樣:ProjectName。我認爲兩者都必須是一樣的。也許這隻出現在這裏。

您的錯誤出現是因爲階段變量是字典,您可以在PList文件中看到,但您嘗試將其用作數組。階段字典包含4個鍵,如我所看到的:分析,設計,開發,設計(奇怪的,在字典中相同的鍵???)。因此,您必須首先使用- (id)objectForKey:(id)aKey;方法,並使用Stages字典中的一個鍵,然後使用objectAtIndex:方法。

+0

感謝您的回覆。我犯了一些錯誤的錯誤,並編輯它們(:嗯,但我已經在我的viewdidload中使用objectforkey方法,或者你的意思是我必須在cellforrowatindex中再次使用該方法嗎?謝謝 – Grace

+0

是的,你必須,因爲你的課程變量是一個字典,所以在那裏objectforkey是好的,但也是階段變量是一個字典,所以你也必須在那裏使用objectforkey。 –

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

注意 「allValues」。 allValues返回字典中所有值的數組, allKeys返回字典中所有鍵的數組。

相關問題