#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];
и, таким образом, переиздаете его. Удалите и это.