创建自定义单元格将iphone应用程序置于无限循环中

时间:2009-11-13 14:37:28

标签: iphone

我创建了一个非常简单的应用程序,我试图在表视图中插入自定义单元格。但是,每当我返回自定义单元格的实例时,屏幕上都不会显示任何内容,其次,应用程序会进入某种奇怪的无限循环。任何帮助将非常感激。我在这个问题上附上了我的代码。

-- view controller which is returning custom cells ---

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


  // Try to recover a cell from the table view with the given identifier, this is for performance
  CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"];

  // If no cell is available, create a new one using the given identifier
  if (cell == nil) {
  NSArray *topLevelObjects = [[NSBundle mainBundle]
  loadNibNamed:@"sample_1ViewController" owner:self options:nil];
  for (id currentObject in topLevelObjects) 
  {
  if ([currentObject isKindOfClass:[CustomCell class]])
  {
  cell = currentObject;
  break;
  }
  }
  }

  // Fill the cell
 cell.lbl.text = @"test";
 return cell;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 return 4;
}

--- custom cell class ---

@interface CustomCell : UITableViewCell {
 IBOutlet UILabel * lbl;
}

@property (nonatomic, retain) IBOutlet UILabel * lbl;

@end

@implementation CustomCell

@synthesize lbl;

@end

----

自定义单元格是sample_1ViewController.xib文件中的UITableCellView资源。它包含一个UILabel。 CustomCell的标识符也是CustomCell。

请查看您是否可以找到可能出错的内容或告诉我可能遗漏的内容。

此致 尼丁

2 个答案:

答案 0 :(得分:3)

sample_1ViewController.nib是否包含viewController类的实例?

每次dequeueResuableCellWithIdentifier:返回nil时,您的代码似乎重新加载整个nib文件,如果该nib文件包含相同viewController类的实例,那么它将继续尝试无限期地重新加载nib文件

因为您需要做的就是返回一个单元类的实例,如何:

首先,在viewController类中添加一个tableCell实例变量:

@class CustomCell;
@interface MyViewController
{
    CustomCell * tableCell;
}
@end

使用init方法创建单元格的单个实例:

- (id)initWithNibName:(NSString *)nibNameOrNil
               bundle:(NSBundle *)nibBundleOrNil 
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self == nil) { return nil; }

    tableCell = [[CustomCell alloc] init];

    return self;
}

请务必在dealloc

中发布
- (void)dealloc
{
    [tableCell release];
}

现在,您的委托方法变为:

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    tableCell.lbl.text = @"test";
    return tableCell;
}

答案 1 :(得分:0)

这也是我的问题。我把单元格的视图放在TableView和

的同一个xib中
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

我致电

[[NSBundle mainBundle] loadNibNamed:CELLE_NIB owner:self options:nil];

谢谢你们!