Я использую xcode 5.1 и тестировал код как на ios7.1, так и на 7.0.2. Приложение аварийно завершает работу с UIImagePickerController в двух случаях на устройстве:
1) когда для allowsEditing
установлено значение YES, после того, как я обрезаю изображение и нажимаю «Выбрать», как только оно возвращается к моему собственному виду, приложение вылетает
2) внутри UIImagePickerController
, когда я возвращаюсь из списка фотографий в список альбомов, и я был внизу списка фотографий, он вылетает (независимо от того, allowsEditing
ДА или нет). Обратите внимание, что он не падает, если я прокрутил список фотографий вверх.
Вот мой код:
- (IBAction)photoPickPressed:(id)sender {
if ([self isPhotoLibraryAvailable]) {
self.imagePicker = [[UIImagePickerController alloc] init];
self.imagePicker.delegate = self;
self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
self.imagePicker.allowsEditing = YES;
NSString *requiredMediaType = (__bridge NSString*)kUTTypeImage;
self.imagePicker.mediaTypes = [[NSArray alloc] initWithObjects:requiredMediaType, nil];
[self presentViewController:self.imagePicker animated:YES completion:nil];
}
}
#pragma mark - image picker delegates
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
[picker dismissViewControllerAnimated:YES completion:^(){
NSLog(@"finished image picking");
});
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
[picker dismissViewControllerAnimated:YES completion:nil];
}
Сообщение о сбое
* Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: "* -[NSProxy doNotRecognizeSelector:scrollViewDidScroll:] вызывается!"
Примечание: НЕ происходит сбой, если я использую камеру, даже если я установил allowsEditing
на YES. Также он ТОЛЬКО вылетает на реальных устройствах, а не в симуляторе.
Просто чтобы уточнить (возможно, не связанный), изначально я объявил imagePicker как
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
, и он разбился. Поэтому я много гуглил, и в сообщении говорится, что контроллер может быть переработан, и предлагается объявить его в определении класса. Итак, теперь я объявил это в своем объявлении класса:
@property (strong, nonatomic) UIImagePickerController *imagePicker;
Заранее спасибо.
Обновление: я попытался даже поместить вызов imagePickerController в корневое представление моего приложения, и оно все равно вылетает с тем же сообщением. У меня еще не должно быть загружено прокручиваемое представление.