2013-12-08 3 views
1

Я видел много вопросов здесь о принятии фото с этой апиIOS сфотографировать с захватывающим изображением Memory Leak

, но я бег в конкретную задачу

с помощью следующего кода

.h файла

@interface ComposeMViewController : UIViewController <UITextFieldDelegate , UITableViewDelegate ,UITableViewDataSource, UIImagePickerControllerDelegate , UINavigationControllerDelegate , MFMailComposeViewControllerDelegate , MFMessageComposeViewControllerDelegate , DistributionListViewControllerDelegate,UITextViewDelegate> 

в ом

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
     //UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 
     _imagePicker.delegate = self; 
     _imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 

     [self presentViewController:_imagePicker animated:YES completion:nil]; 
    } else { 
     NSLog(@"Camera not available"); 
    } 


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 

    NSLog(@"At 1"); 
    UIImage *fullImage = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    _attachment = [NSMutableDictionary dictionary]; 
    NSData* imgData = UIImageJPEGRepresentation(fullImage,0.0); 
    [_attachment setObject:@"atachmentINFOR.jpg" forKey:@"ImageName"]; 
    [_attachment setObject:imgData forKey:@"ImageData"]; 
    NSLog(@"%@",info); 
    [self dismissViewControllerAnimated:YES completion:nil];//warning disabled 
} 

Теперь я получаю предупреждение о памяти, может ли кто-нибудь знать почему?

ответ

1

Вы всегда должны проверить, если тип источника доступен в к документации.. Как @Programming Томас сказал, что UIImagePickerControllerDelegate, UINav igationControllerDelegate делегат был установлен ..

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
     UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 
     imagePickerController.delegate = self; 
     imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 

     [self presentViewController:imagePickerController animated:YES completion:nil]; 
    } else { 
     NSLog(@"Camera not available"); 
    } 

, если вам случится, чтобы получить сообщение об ошибке, как «Предупреждение: попытка представить на чей взгляд не в иерархии окна» обычно происходит, когда viewContoller не полностью загружен еще ждать на секунду или около того. возможно, использовать таймер отправки через полсекунды

1

Наиболее вероятное объяснение состоит в том, что ваш UIViewController не реагирует на UINavigationControllerDelegate или UIImagePickerControllerDelegate (она должна отвечать как для того, чтобы быть делегатом для UIImagePickerController.

Ваша вторая попытка не компиляции, потому что SourceType не является собственностью UIImagePickerController - это sourceType по соглашению, Objective-C/Cocoa использует строчные буквы в начале переменных и свойств имен

+0

Он реагирует (и у меня нет никаких предупреждений этого типа) а вторая попытка отлично работает для галереи подборщика но для камеры не :( –

+0

Вы тестирование на реальном устройстве, имеющем камеру в наличии (UIImagePickerController имеет метод, который позволяет проверить на это)? –

+0

Да, я тестирую на своем телефоне :) –

0

Это может помочь кому-то еще - я знаю, что это старый поток, но у меня также возникает утечка памяти в отношении камеры. Я запустил на нем инструменты (рекомендовал бы) и обнаружил, что ответственный кадр: [UIImagePickerController viewWillDisappear:]. Это относится к библиотеке UIKit, поэтому я боюсь, что вы можете немного исправить утечку памяти. Его ошибка в UIKit. Я использую iOS7.1 на iPhone 5s. Я бы рекомендовал использовать библиотеку с эффективной памятью, такую ​​как SimpleCam, которую можно найти в GitHub.