У меня проблема с моим приложением. Он падает после нескольких раз работы с изображениями, и я понятия не имею, почему. У меня есть TabBar, в одном элементе TabBat у меня есть контроллер навигации. В корневом контроллере этой навигации у меня есть две кнопки. Одна кнопка - получить изображение из камеры или библиотеки фотографий, вторая кнопка - получить изображение из сохраненных изображений в приложении. С выбранным изображением я перехожу к следующему контроллеру представления (SelectImageViewController).Ошибка приложения iPhone
С первой кнопкой я использую этот код:
- (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 я обрабатываю еще один раз изображение.
Я знаю, что весь метод обработки изображений занимает много памяти и некоторое время (особенно, что мое исходное изображение, которое я часто использую, не масштабируется), но приложение также падает, когда я выбираю только изображение из библиотеки фотографий и перейдите в SelectImageViewController. Может быть, я не должен использовать навигационный контроллер? Кто-нибудь знает, что может быть неправильно?
Спасибо за любую помощь.
При быстром просмотре ничего не получается с кодом. Отправьте исключение. – Jordan
Вы установили контрольные точки в objc_exception_throw и [NSException raise]? Это может помочь выявить проблему. –
Я не знаю исключения. После нескольких раз я начинаю получать только предупреждение о памяти, а иногда иногда ничего не получаю, иногда получаю предупреждения о памяти, а затем внезапно сбой приложения. Я вижу только в консоли «Программный принятый сигнал: 0» –