Я относительно новичок в программировании на iOS, но с небольшим опытом программирования на других языках, в основном на C # и Java.
Я пытаюсь создать нечто вроде галереи изображений с указанными категориями для какого-то продукта дляустройство iPad.Пользовательский интерфейс довольно прост и состоит из «Экран выбора» (FirstViewController, см. Ниже) и «Галерея».Экран выбора содержит 2 UITableView, master
и detail
, которые отображают категории продукта и подкатегории соответственно.Когда пользователь делает выбор, он нажимает «увидеть изображение» button
, и изображения отображаются в режиме прокрутки в «Галерее».«Галерея» - это отдельный файл XIB, который представлен модально.Это все работает нормально.
Но странная вещь происходит, когда пользователь переключается между «Галерея» и «Экран выбора».И странно, что это происходит именно при 4-м «переключении» между ними.Я продолжаю получать сообщение:
- [FirstViewController tableView: didSelectRowAtIndexPath:]: сообщение отправлено на освобожденный экземпляр 0x4b1f9f0 "
Затем программа падает ... Яустановить NSAutoreleaseFreedObjectCheckEnabled, NSZombiesEnabled и NSDebugEnabled и все еще не более подробное описание. Даже «Guard malloc» не помогло.
Я понимаю это как некоторую проблему с памятью, но понятия не имею, почему? Отлично работает 3 раза, но не 4.
Вот та часть кода, которая вызывает проблемы:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//check which table (master or detail) row is clcked then perform click event
if( tableView.tag == 0){
//populate list of brands using predefined function
[self populateBrandNames:(int)indexPath.row];
//reload data
[detail reloadData];
//4 a good UI experience we'll remove any previous picture loaded into brandImage
bUserSelected = false;
[brandImage setBackgroundImage:nil forState:UIControlStateNormal];
}else{ //the detail table sent event
NSIndexPath *master_row, *details_row;
//get selected rows
master_row = [master indexPathForSelectedRow];
details_row = [detail indexPathForSelectedRow];
NSString *logoName = [[NSString alloc] initWithFormat:@"%02d%02d_logo", (int)master_row.row, (int)details_row.row];
NSString *path = [[NSBundle mainBundle] pathForResource:logoName ofType:@"jpg"];
//check if we have path to resource (if logo exsist)
if( path != nil ){
UIImage *logo = [[UIImage alloc] initWithContentsOfFile:path];
//display selected logo
bUserSelected = true;
[brandImage setBackgroundImage:logo forState:UIControlStateNormal];
NSLog(@"brandImame set");
//set current galery tag
[currentGaleryTag setString:@""];
[currentGaleryTag appendFormat:@"%02d%02d", (int)master_row.row, (int)details_row.row];
[logo release];
}else{
NSLog(@"logo not loaded, galery tag : %@, category name : %@", logoName, [detail cellForRowAtIndexPath:details_row].textLabel.text );
}
[logoName release];
}
}
Заранее спасибо!