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];
        //}
    }
}