通用 Xcode 相机胶卷应用程序问题
Posted
技术标签:
【中文标题】通用 Xcode 相机胶卷应用程序问题【英文标题】:Universal Xcode Camera Roll App Issue 【发布时间】:2012-09-06 15:55:47 【问题描述】:我在 Xcode 中有一个通用应用程序。如果用户使用的是 iPad,则使用库中的图像按钮效果很好。但是,如果他们使用 iPhone,则该按钮不起作用。
这是我收到的错误。
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIPopoverController initWithContentViewController:] 在 UIUserInterfaceIdiomPad 下未运行时调用。”
被告知此代码可以工作。它是否进入下面的(IBAction)代码?
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) Add Popover code here else
Add alternative for popover here
- (IBAction) useCameraRoll: (id)sender
if ([self.popoverController isPopoverVisible])
[self.popoverController dismissPopoverAnimated:YES];
else
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeSavedPhotosAlbum])
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = [NSArray arrayWithObjects:
(NSString *) kUTTypeImage,
nil];
imagePicker.allowsEditing = YES;
newMedia = NO;
【问题讨论】:
【参考方案1】:发生此崩溃是因为您无法在 iPhone 上使用 UIPopOverControllers,只能在 iPad 上使用。
[UIPopoverController initWithContentViewController:] 不时调用 在 UIUserInterfaceIdiom Pad 下运行。'
试试这样的:
- (IBAction)useCameraRoll:(id)sender
UIPopoverController *popoverController = [[UIPopoverController alloc] init];
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeSavedPhotosAlbum])
UIImagePickerController *imagePicker =
[[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = [NSArray arrayWithObjects:
(NSString *) kUTTypeImage,
nil];
imagePicker.allowsEditing = YES;
newMedia = NO;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
if (popoverController.isPopoverVisible)
[popoverController dismissPopoverAnimated:YES];
else
[popoverController setContentViewController:imagePicker];
[popoverController setDelegate:self];
[popoverController presentPopoverFromRect:CGRectMake(0, 0, 320, 320) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
else
[imagePicker presentViewController:imagePicker animated:YES completion:nil];
【讨论】:
好的,所以代码给了我一些警告和错误。警告是 popoverController 的本地声明隐藏实例变量。错误是使用了未声明的标识符图像选择器。 @Niche'AdMarketing 我知道这些,我离开它们的唯一原因是让你知道你必须移动一些东西,比如“imagePicker”的声明。由于它包含在isSourceTypeAvailable
"if" 中,因此不能在它之外使用。在你的头文件中声明 imagePicker 应该会静音。
在 .h 中声明 imagePicker 会是这样吗? UIImageView *imagePicker;然后@property(非原子,保留)IBOutlet UIImageView *imagePicker;
@Niche'AdMarketing 你不需要@property
,这不是UIImageView,它是UIImagePickerController *imagePicker;
以上是关于通用 Xcode 相机胶卷应用程序问题的主要内容,如果未能解决你的问题,请参考以下文章