2012-09-27 49 views
1

我想構建一個多層xmlparser,它顯示tableview中的數據並切換到基於選定行(最有可能是相同的viewcontroller)下一個視圖。推送tableview結果cellForRowAtIndexPath異常

我開始使用storyboard segues,但是因爲我使用的是動態單元格,我不知道如何創建多個push segue(因爲它需要推送到各種viewcontrollers)。所以我保留了故事板視圖,刪除了所有的細節並使用了下面的代碼。

終止應用程序由於未捕獲的異常 「NSInternalInconsistencyException」,原因是::

然而,當新的觀點試圖pupulate排它拋出這個異常「的UITableView數據源 必須的tableView返回一個單元格:的cellForRowAtIndexPath :」

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"index: %i", indexPath.row); 

    switch (indexPath.row) { 
     case 0: 
     { 
      DetailViewController *detailViewController = [DetailViewController alloc]; 
      [self.navigationController pushViewController:detailViewController animated:YES]; 
      break; 
     } 
     //... 
     default: 
     { 
      LayerViewController *layerViewController= [LayerViewController alloc]; 
      [layerViewController setStartUpWithIndex:indexPath.row andLayer:layercount]; 
      [self.navigationController pushViewController:layerViewController animated:YES]; 
      break; 
     } 


    } 

} 

setStartUpWithIndex:andLayer:是我的init方法...

通過故事板賽格瑞時,即時通訊推與以下SEGUE代碼不會出現問題:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     [[segue destinationViewController] setStartUpWithIndex:indexPath.row andLayer:layercount]; 
} 

我覺得我失去了一些東西的「SEGUE」的方法做,我需要在我的didSelectRowAtIndexPath方法作爲的cellForRowAtIndexPath包括:在視圖的第一層中工作良好。

請編輯:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"LayerCell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    cell.textLabel.text = [[articles objectAtIndex:indexPath.row]objectForKey:@"HerstellerName"]; 
// cell.textLabel.text = @"ololol"; 

    return cell; 
} 

物品陣列工作BTW

+0

錯誤發生在tableView:cellForRowAtIndexPath:方法中,您應該顯示它的代碼。只有在選擇行0以外的行或行0或所有行時纔會出現這種情況嗎? – rdelmar

+0

虐待我編輯我的秒 – drUniversalis

回答

1

沒有創建任何細胞。我不知道爲什麼蘋果沒有包括這在默認實現,但經過:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

您需要添加:

if (cell==nil){ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

否則你只是依靠離隊細胞贏取在tableView加載時不存在。

編輯:如果你不使用ARC,你需要用autorelease包裝這個alloc方法。

+0

這樣做訣竅,謝謝 – drUniversalis

0

你是推來看待另一個的viewController這下的viewController有沒有實施數據源的方法。這發生了什麼。

據我所知,你正試圖用一個表格呈現一個xml節點,每個表格行包含了呈現節點的子節點。使用chld節點選擇行可以進入下一個表格視圖,該表格顯示所選節點的子節點的表格。

IMO您可能只需要一個視圖控制器來呈現當前xml節點,該節點只更改要在表中呈現的數據並重新載入表。所以不需要推視圖控制器。您可以使用則方法

– reloadRowsAtIndexPaths:withRowAnimation: 

爲表中的所有節點,設置類似於更改視圖控制器動畫(又名滑左舊錶)

+0

我推動相同的數據控制器....它推動自己。重新加載的東西似乎對一些行很好,但其他人需要一個全新的viewcontroller和我得到同樣的錯誤,當我嘗試推到另一個(仍然非常相似)一個 – drUniversalis

+0

所以問題可能是,你有相同的viewController實例這是指同一張表。您必須選擇:重新加載表,而不推動任何viewController或有兩個彼此推動視圖控制器的獨立實例。我會嘗試重新加載表格。 –

+0

另一個視圖控制器是否符合UITableViewDataSource協議? –

相關問題