Создание пользовательской ячейки переводит приложение iphone в бесконечный цикл - PullRequest
2 голосов
/ 13 ноября 2009

Я создал очень простое приложение, в котором я пытаюсь вставить пользовательскую ячейку в табличное представление. Однако всякий раз, когда я возвращаю экземпляр пользовательской ячейки, на экране ничего не отображается, а во-вторых, приложение входит в какой-то странный бесконечный цикл. Любая помощь приветствуется. Я приложил свой код в этом вопросе.

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

----

Пользовательская ячейка - это ресурс UITableCellView в файле sample_1ViewController.xib. Содержит UILabel. Идентификатор CustomCell также является CustomCell.

Пожалуйста, посмотрите, можете ли вы найти что-то, что может быть неправильным, или рассказать мне о чем-то, что я, возможно, упускаю.

С уважением Нитин

Ответы [ 2 ]

3 голосов
/ 13 ноября 2009

Содержит ли sample_1ViewController.nib экземпляр вашего класса viewController?

Ваш код, кажется, перезагружает весь этот файл пера каждый раз, когда dequeueResuableCellWithIdentifier: возвращает ноль, и если этот файл пера содержит экземпляр того же класса viewController, то он будет продолжать пытаться перезагрузить файл пера бесконечно. 1004 *

Поскольку все, что вам нужно сделать, это вернуть экземпляр класса ячейки, как это сделать:

Сначала добавьте переменную tableCell в ваш класс viewController:

@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;
}
0 голосов
/ 08 мая 2013

Это была и моя проблема. Я поместил вид ячейки в тот же XIB TableView и в

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

я позвонил

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

Спасибо, ребята!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...