2010-10-10 71 views
2

当我建立和分析时,我被告知单元格永远不会得到一个值...这似乎是我的逻辑错误,但然后应用程序崩溃试图加载表。所以......为什么来?tableview:cellforrowatindexpath与多种细胞类型

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

     static NSString *Cell1Identifier = @"Cell1"; 
     static NSString *Cell2Identifier = @"Cell2"; 
     static NSString *Cell3Identifier = @"Cell3"; 
     UITableViewCell *cell; 

     if ([indexPath section] == 0) { 
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Cell1Identifier]; 

      if (cell == nil) { 
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 
               reuseIdentifier:Cell1Identifier] autorelease]; 
      } 
     } 

     else if ([indexPath section] == 1) { 
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Cell3Identifier]; 
      if (cell == nil) { 
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
               reuseIdentifier:Cell3Identifier] autorelease]; 
      } 
     } 

     else { 
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:Cell2Identifier]; 
      if (cell == nil) { 
       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
               reuseIdentifier:Cell2Identifier] autorelease]; 
      } 
     } 


     // Configure the cell... 
     [self configureCell:cell 
       atIndexPath:indexPath]; 

     return cell; 
    } 

回答

3
// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *Cell1Identifier = @"Cell1"; 
    static NSString *Cell2Identifier = @"Cell2"; 
    static NSString *Cell3Identifier = @"Cell3"; 
    NSString *identityString = @""; 
    switch ([indexPath section]) { 
     case 0: { 
      identityString = Cell1Identifier; 
      break; 
     } 
     case 1: { 
      identityString = Cell3Identifier; 
      break; 
     } 
     case 2: { 
      identityString = Cell2Identifier; 
      break; 
     } 

     default: 
      break; 
    } 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identityString]; 

    if ([indexPath section] == 0) { 

     if (cell == nil) { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 
              reuseIdentifier:Cell1Identifier] autorelease]; 
     } 
    } 

    else if ([indexPath section] == 1) { 
     if (cell == nil) { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
              reuseIdentifier:Cell3Identifier] autorelease]; 
     } 
    } 

    else { 
     if (cell == nil) { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
              reuseIdentifier:Cell2Identifier] autorelease]; 
     } 
    } 


    // Configure the cell... 
    [self configureCell:cell 
      atIndexPath:indexPath]; 

    return cell; 
}