Iphone 在imagePickerController完成后,向viewController显示模态

Iphone 在imagePickerController完成后,向viewController显示模态,iphone,objective-c,ios,ipad,Iphone,Objective C,Ios,Ipad,在从imagePickerController中选择图像后,我需要调用视图控制器,因此我使用了以下代码: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { imageEditorView = [[ImageEditorViewController alloc]initWithNibName:@"Image

在从
imagePickerController
中选择图像后,我需要调用视图控制器,因此我使用了以下代码:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    imageEditorView = [[ImageEditorViewController alloc]initWithNibName:@"ImageEditorViewController" bundle:nil];
    imageEditorView.mainViewController = self;
    imageEditorView.imageBG = [info objectForKey:UIImagePickerControllerOriginalImage];

    [self presentViewController:imageEditorView animated:YES completion:nil];

}
但调试器给了我一个警告:

Warning: Attempt to present <ImageEditorViewController: 0xaa42320> on
     <ViewController: 0x9b58680> whose view is not in the window hierarchy!

首先,您必须关闭UIImagePickerController,然后只有您可以使用presentViewController来创建另一个视图控制器

您可以使用下面的代码

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

[self dismissModalViewControllerAnimated:YES];
imageEditorView = [[ImageEditorViewController alloc]initWithNibName:@"ImageEditorViewController" bundle:nil];
imageEditorView.mainViewController = self;
imageEditorView.imageBG = [info objectForKey:UIImagePickerControllerOriginalImage];

[self presentViewController:imageEditorView animated:YES completion:nil];

}

我认为在
AppDelegate
中,您没有设置
窗口的
rootViewController
。 因此,与其将
子视图
添加到
窗口
,不如将
窗口的
根视图控制器

另一件事可能是您当前的
viewController
实际上是另一个
viewController
子视图


我建议将
self.window.rootViewController=yourMaincontroller
放入
AppDelegate
更新:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    imageEditorView = [[ImageEditorViewController alloc]initWithNibName:@"ImageEditorViewController" bundle:nil];
    imageEditorView.mainViewController = self;
    imageEditorView.imageBG = [info objectForKey:UIImagePickerControllerOriginalImage];


    [self performSelector:@selector(presentPicture) withObject:nil afterDelay:2.0];
    [self dismissModalViewControllerAnimated:YES];

}


-(void)presentPicture 
{
     [self presentViewController:imageEditorView animated:YES completion:nil];
}

使用以下代码,如:

[self dismissViewControllerAnimated:YES completion:^{
   [self.parentViewController presentViewController:imageEditorView animated:YES completion:nil];
}];

警告:在演示过程中尝试在上演示当我解除它时!首先删除图像选择器,然后尝试显示视图控制器。只需发布didFinishLaunchingWithOptions方法的代码请…@ParasJoshi签出编辑question@Momi现在用我的didFinishLaunchingWithOptions方法替换didFinishLaunchingWithOptions方法…xcode自动将这行代码放入appDelegate,不需要添加。谢谢,但问题相同!“警告:尝试显示不在窗口层次结构中的视图!”看到这个答案,我认为这是因为您的窗口不适用于多页窗口,所以。。。但是现在它可以用这个代码工作,但是我想这里遗漏了一些东西,伙计。@Momi只是改变了[self dismissModalViewControllerAnimated:YES]的流程;行如果不起作用的话。。只需尝试一下,并添加您想要的延迟时间,但这是最好的..应用程序崩溃与此问题:
由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:'-[ViewController dismissModalViewController:完成:]:无法识别的选择器发送到实例0x9b2f3b0
@Momi:您正在使用哪个ios版本?@Momi:我的答案中有一个输入错误,现在检查答案
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    imageEditorView = [[ImageEditorViewController alloc]initWithNibName:@"ImageEditorViewController" bundle:nil];
    imageEditorView.mainViewController = self;
    imageEditorView.imageBG = [info objectForKey:UIImagePickerControllerOriginalImage];


    [self performSelector:@selector(presentPicture) withObject:nil afterDelay:2.0];
    [self dismissModalViewControllerAnimated:YES];

}


-(void)presentPicture 
{
     [self presentViewController:imageEditorView animated:YES completion:nil];
}
[self dismissViewControllerAnimated:YES completion:^{
   [self.parentViewController presentViewController:imageEditorView animated:YES completion:nil];
}];