У меня проблема с моим приложением. Он падает после нескольких раз работы с изображениями, и я понятия не имею, почему.
У меня есть TabBar, в одном элементе TabBat у меня есть контроллер навигации. В корневом контроллере этой навигации у меня есть две кнопки. Одна кнопка предназначена для получения изображения из камеры или библиотеки фотографий, вторая кнопка - для получения изображения из сохраненных изображений в приложении. С выбранным изображением я иду к следующему представлению контроллера (SelectImageViewController).
С первой кнопкой я использую этот код:
- (void) showImagePickerWithSourceType:(NSInteger) sourceType
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = sourceType;
picker.allowsEditing = NO;
[self presentModalViewController:picker animated:YES];
[picker release];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *selectedImage = (UIImage *)[info objectForKey:@"UIImagePickerControllerEditedImage"];
if (selectedImage == nil)
selectedImage = (UIImage *)[info objectForKey:@"UIImagePickerControllerOriginalImage"];
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
SelectImageViewController *selectImageViewController = [[[SelectImageViewController alloc] initWithImage:selectedImage] autorelease];
[self.navigationController pushViewController:selectImageViewController animated:YES];
}
Со второй кнопкой я использую:
DocumentsViewController *documentsViewController = [[[DocumentsViewController alloc] init] autorelease];
[self.navigationController pushViewController:documentsViewController animated:YES];
DocumentsViewController - это TableViewController со списком изображений, когда я выбираю одно изображение, а затем перехожу к SelectImageViewController.
В SelectImageViewController я выполняю некоторую обработку изображения и затем перехожу к следующему контроллеру представления, где я делаю другую обработку изображения.
Вот код из SelectImageViewController:
- (id) initWithImage:(UIImage *) image
{
self = [super init];
if (!self) return nil;
self.originalImage = image;
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
[NSThread detachNewThreadSelector:@selector(processImage) toTarget:self withObject:nil];
}
- (void) processImage
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
self.originalImage = [ImageHelper scaleAndRotateImage:self.originalImage toSize:CGSizeMake(1500, 1500)];
self.processedImage = [ImageHelper scaleImage:self.originalImage maxWidth:320 maxHeight:367];
[self performSelectorOnMainThread:@selector(finish) withObject:nil waitUntilDone:NO];
[pool release];
}
- (void) finish
{
imageView = [[UIImageView alloc] initWithImage:self.processedImage];
imageView.center = self.view.center;
[self.view addSubview:imageView];
[self.view sendSubviewToBack:imageView];
[NSThread detachNewThreadSelector:@selector(processImage2) toTarget:self withObject:nil];
}
- (void) processImage2
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSArray *corners = [OpenCV processImage:self.processedImage];
[self performSelectorOnMainThread:@selector(finish2) withObject:nil waitUntilDone:NO];
[pool release];
}
В SelectImageViewController у меня есть одна кнопка, и когда я нажимаю на нее, я обрабатываю исходное изображение и затем перехожу к следующему контроллеру представления.
В последнем контроллере представления в методе viewDidLoad я еще раз обрабатываю изображение.
Я знаю, что все методы обработки изображений занимают много памяти и некоторое время (особенно то, что мое исходное изображение, которое я часто использую, не масштабируется), но приложение также вылетает, когда я выбираю только изображение из библиотеки фотографий и выхожу выбрать ImageViewController. Может мне не стоит использовать навигационный контроллер? Кто-нибудь знает, что может быть не так?
Спасибо за любую помощь.