iphone: UITableView приводит к сбою приложения

#iphone #uitableview #sqlite

#iPhone #uitableview #sqlite

Вопрос:

не знаю, что не так с моим табличным представлением, у меня есть словарь (этот словарь создается с помощью операции sqlite), и я пытаюсь создать ячейки, подобные этой

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

static NSString *MyIdentifier = @"MyIdentifier";
MyIdentifier = @"tblCellView";

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if(cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
    cell = aCustomCell;
    aCustomCell=nil;
}

NSMutableDictionary *tempDictionary=[[NSMutableDictionary alloc] init];

tempDictionary=[offendersNamesList objectForKey:[NSString stringWithFormat:@"key%d", indexPath.row 1]];

[[cell offendersImageView] setImage:[UIImage imageNamed:@"contact.png"]];
[cell.offendersNameLbl setText:[tempDictionary objectForKey:@"name"]];
[cell.offendersViolation setText:[tempDictionary objectForKey:@"offence"]];
[tempDictionary release];

//[cell setLabelText:[arryData objectAtIndex:indexPath.row]];
return cell;
  

}

все элементы отображаются правильно, но когда я прокручиваю табличный вид вверх, приложение вылетает, можете ли вы помочь мне в этом?

Ответ №1:

Сначала вы выделяете новый NSMutableDictionary и сохраняете его в tempDictionary . Однако в самой следующей строке вы перезаписываете эту переменную указателем на новый объект ( tempDictionary=[offendersNamesList objectForKey:[NSString stringWithFormat:@"key%d", indexPath.row 1]]; ). Итак, у вас здесь утечка памяти, [[NSMutableDictionary alloc] init] это не нужно, удалите это.

Теперь, из-за соглашений об именовании, объект, который вы получили из offendersNamesList , автоматически освобождается, но вы позже вызываете [tempDictionary release]; и, таким образом, переиздаете его. Удалите и это.