ошибка при появлении "нового" пользовательского uitablecellview - PullRequest
0 голосов
/ 06 января 2011

Я использую пользовательский uitablecellview, как раньше. Но, к сожалению, на этот раз возникает исключение, когда появляется новая ячейка. Так что одна и та же часть кода работала отлично много раз раньше. качество изображений, которые я помещаю в клетки, очень высокое. У вас были идеи? Или я должен объяснить больше? Редактировать некоторый код:

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

static NSString *CellIdentifier = @"CellView";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"SPViewControllCell" owner:self options:nil]; 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell=cellView;
    self.cellView=nil;
}
UILabel *itemTitle=(UILabel*)[cell viewWithTag:1];
[itemTitle setFont:[UIFont fontWithName:@"Renaissance" size:24]];
itemTitle.text=[titles objectAtIndex:indexPath.row];

UIImageView *img=(UIImageView*)[cell viewWithTag:2];
img.image=[images objectAtIndex:indexPath.row];

return cell;

}

Исключение: "NSInvalidArgumentException", причина: '- [UITableViewCell objectAtIndex:]: нераспознанный селектор отправлен на экземпляр 0x5f36be0' " Спасибо.

Ответы [ 2 ]

1 голос
/ 06 января 2011

Я предполагаю, но titles массив, созданный с чем-то вроде:

-(void) viewDidLoad(){
   // this will give you an autoreleased object
   titles = [NSArray arrayWithObjects:@"Foo",...];
   // titles will be released once the current event is handled


   // try the alloc/init style method
   titles = [[NSArray alloc] initWithObjects:... ];
   // this will create an array with the retain count still at 1, thus won't be released

То же самое относится к images.

У вас есть классическая проблема управления памятью, когда вы думаете, что ссылка указывает на NSArray, но на самом деле этот массив давно ушел и может быть заменен другим случайным другим объектом.

Для полноты:

- (void) viewDidUnload {
    // clean up after your self 
    [titles release];
    [images release];
}
0 голосов
/ 06 января 2011

Из описания исключения кажется, что вы вызываете метод ** objectAtIndex: ** из экземпляра класса UITableViewCell.

Мой вопрос, в вашем коде, каков тип класса ваших изображений и заголовков ivar?

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