Я пытаюсь использовать UIImagePickerController, чтобы захватить фотографию у пользователей Фотографии на их iPhone/iPad. Этот код отлично подходит для iPhone, но когда я запускаю его на iPad, отладчик дает мне сообщение «Завершение приложения из-за неперехваченного исключения« NSInvalidArgumentException », причина:« На iPad UIImagePickerController должен быть представлен через UIPopoverController ». Я очень новичок в Objective-C, поэтому я не знаю, как отредактировать этот код, чтобы использовать UIPopoverController, когда он запускается на iPad. Я бы предпочел не создавать 2 новых контроллера View, поэтому мне было интересно, знает ли кто, какой код мне нужно добавить, чтобы он работал как на iPhone, так и на iPad. Вот код в моих контроллерах зрения:iOS: UIImagePickerController Issue
ViewController.h:
@interface PhotoViewController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate> {
UIButton *grabButton;
UIImageView *image;
UIImagePickerController *imgPicker;
}
@property (strong, nonatomic) IBOutlet UIButton *grabButton;
@property (strong, nonatomic) IBOutlet UIImageView *image;
@property (strong, nonatomic) UIImagePickerController *imgPicker;
- (IBAction)grabImage;
@end
ViewController.m:
#import "PhotoViewController.h"
@implementation PhotoViewController
@synthesize grabButton;
@synthesize image;
@synthesize imgPicker;
- (IBAction)grabImage {
[self presentModalViewController:self.imgPicker animated:YES];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo {
image.image = img;
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"Photo Gallery", @"Photo Gallery");
self.tabBarItem.image = [UIImage imageNamed:@"42-photos.png"];
}
return self;
}
- (void)viewDidLoad
{
self.imgPicker = [[UIImagePickerController alloc] init];
self.imgPicker.allowsImageEditing = YES;
self.imgPicker.delegate = self;
self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[super viewDidLoad];
}
Заранее спасибо!
Большое спасибо! Должен ли я добавить это в мой метод viewDidLoad? – John
Да, вы можете сделать это на viewDidLoad – aryaxt
попробуйте это: ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) – neoneye