Ios 尝试在iPhone上演示UIImagePickerController时崩溃
当我试图从特定的视图控制器显示Ios 尝试在iPhone上演示UIImagePickerController时崩溃,ios,objective-c,uiimagepickercontroller,exc-bad-access,Ios,Objective C,Uiimagepickercontroller,Exc Bad Access,当我试图从特定的视图控制器显示UIImagePickerController时,我的应用程序正在崩溃 我有一个对象,CLYImagePickerController,它为UIImagePickerController处理简单的事情,例如创建、显示和处理UIAlertView,它为用户显示哪种UIImagePickerController的选项,并处理用户选择的图像。此对象告诉代理视图控制器使用以下方法呈现UIImagePickerController: - (void)showImagePick
UIImagePickerController
时,我的应用程序正在崩溃
我有一个对象,CLYImagePickerController
,它为UIImagePickerController
处理简单的事情,例如创建、显示和处理UIAlertView
,它为用户显示哪种UIImagePickerController
的选项,并处理用户选择的图像。此对象告诉代理视图控制器使用以下方法呈现UIImagePickerController
:
- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType
{
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
imagePickerController.sourceType = sourceType;
imagePickerController.delegate = self;
[self.delegate presentViewController:imagePickerController animated:YES completion:nil];
}
编辑2013年11月27日:
self
是第二段中描述的CLYImagePickerController
。它只是一个NSObject子类CLYImagePickerController
的委托
按以下方式定义:
@property (weak, nonatomic) UIViewController <CLYImagePickerControllerDelegate> *delegate;
这个怎么样:
- (void) showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType
{
if ([UIImagePickerController isSourceTypeAvailable:sourceType])
{
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.sourceType = sourceType;
imagePickerController.delegate = self;
[self.delegate presentModalViewController:imagePickerController animated:NO];
// if this doesn't work try using:
// if ([self.providerDelegate respondsToSelector:@selector(showImagePicker:)]) {
// [self.providerDelegate performSelectorOnMainThread:@selector(showImagePicker:)
// withObject:imagePickerController
// waitUntilDone:NO];
//}
}
}
我认为这是一个已知的苹果错误,与加载某些字体有关。以下是一个解决方法:
什么是自我类型的课程?我认为您应该替换代码[self.delegate presentViewController:imagePickerController animated:YES completion:nil];使用[自呈现视图控制器:imagePickerController已设置动画:是完成:无];如果self是UIViewController子类。请提供委托是什么(希望是UIViewController的子类)以及CLYImagePickerController是否是NSObject的子类的详细信息。我对我的问题进行了编辑,以便更清楚地了解上述代码中的
self
指的是什么,以及委托是什么。基本上,self
是一个NSObject子类,它只处理与UIImagePickerController相关的设置代码,delegate
是一个UIViewController子类,它表示由CLYImagePickerController
创建的UIImagePickerController
在这种情况下,代理表示模式视图。我在上面的编辑中添加了一个说明。只有视图控制器才能显示模式视图。请在评论之前阅读我的编辑。我澄清了委托确实是UIViewController
的子类。我尝试了您的第二个建议(使用presentModalViewController:animated:),但同样的问题仍然存在。
- (void) showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType
{
if ([UIImagePickerController isSourceTypeAvailable:sourceType])
{
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.sourceType = sourceType;
imagePickerController.delegate = self;
[self.delegate presentModalViewController:imagePickerController animated:NO];
// if this doesn't work try using:
// if ([self.providerDelegate respondsToSelector:@selector(showImagePicker:)]) {
// [self.providerDelegate performSelectorOnMainThread:@selector(showImagePicker:)
// withObject:imagePickerController
// waitUntilDone:NO];
//}
}
}