iPhone: UIImagePickerController случайно не делает снимок - PullRequest
1 голос
/ 12 апреля 2010

Я использую UIPickerViewController для съемки. Это работает на 80%, но, казалось бы, наугад не получается сделать снимок. Прослеживая код, я обнаружил, что он иногда переходит на

-PinRecordNewTableViewController:viewDidUnload. 

Вот где он терпит неудачу, потому что он устанавливает nil для всех ivars.

@interface PinRecordNewTableViewController : UITableViewController {
}
... 
@implementation PinRecordNewTableViewController
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
...
        PinRecordNewPicture *pinRecordNewPicture = [[PinRecordNewPicture alloc] initWithNibName:@"PinRecordNewPicture" bundle:nil];
        pinRecordNewPicture.delegate = self;
        [self.navigationController pushViewController:pinRecordNewPicture animated:YES];    
        [pinRecordNewPicture release];  
...             
}
@interface PinRecordNewPicture : UIViewController 
...
@implementation PinRecordNewPicture
...
- (void)picturePicker:(UIImagePickerControllerSourceType)theSource {

UIImagePickerController *picker = [[UIImagePickerController alloc] init];

picker.delegate = self;
picker.sourceType = theSource;
picker.allowsEditing = YES;

[self presentModalViewController:picker animated:YES];

[picker release];
}

- (IBAction) takePicture:(id)sender {

UIImagePickerControllerSourceType source = UIImagePickerControllerSourceTypeCamera;

    if ([UIImagePickerController isSourceTypeAvailable:source]) {

       [self picturePicker:source];

    }

Что я сделал не так? Я пропустил что-то, что заставляет его вести себя "случайно"?

Заранее спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2011

Если вы пытаетесь сделать несколько снимков, сохраните текущее в области «Документы» приложения. Это освобождает память. Таким образом, предупреждения памяти можно избежать.

Если вызывается ViewDidUnload, вы можете подумать о сохранении соответствующего состояния приложения в didReceiveMemoryWarning и восстановлении его в viewDidLoad. Это делается с использованием класса NSUserDefaults

0 голосов
/ 12 апреля 2010

Если он называется viewDidUnload, то вполне вероятно, что вашему приложению не хватает памяти. Это может быть проблемой или просто результатом редактирования больших изображений в телефоне.

...