简单视图控制器开关导致:在演示文稿正在进行时尝试显示

时间:2013-04-28 04:42:49

标签: ios objective-c presentmodalviewcontroller

我正在学习如何使用故事板处理视图控制器层次结构。我有2个ViewControllers:类型为cwViewController的根(我理解的是下面的'self')和第二个类型的WorkspaceViewController。我正在“在演示文稿正在进行时尝试演示!”作为此代码的结果。

- (IBAction)nextView {
    WorkspaceViewController *workspace = [[WorkspaceViewController alloc] initWithNibName:nil bundle:nil];
    [self presentViewController:workspace animated:YES completion:NULL]; }

How to present view controller properly?的答案是最接近的答案可能适用但不太适合这种情况,因为我不是在VC之间来回切换,我只是提出一个,然后将其解雇显示原本的。

然后,我尝试在呈现第二个之前解除当前的一个,正如一些答案所示,如下:

[self dismissViewControllerAnimated:NO completion:nil];
[self presentViewController:workspace animated:YES completion:NULL];

但是这只会给我一个额外的警告:在演示或解雇过程中尝试从视图控制器中解雇!

做了一些其他的研究我看到类似的问题通过添加一个块来解决

[self dismissViewControllerAnimated:YES...]

但这在这里没有帮助,因为我的警告发生在我甚至到达我称之为解雇方法的点之前。有关如何处理视图的顺序和层次结构的任何进一步知识将是一个很大的帮助。非常感谢。

3 个答案:

答案 0 :(得分:2)

您是否从按钮创建了一个segue到您的WorkSpaceViewController?如果是这样,您可能会尝试两次呈现WorkSpaceView - 一次选择按钮时,一次来自cwViewController。要消除错误,请将按钮中的segue删除到WorkSpaceViewController,然后重新创建segue - 这次是在cwViewController和WorkSpaceViewController之间。这应该照顾它。

答案 1 :(得分:2)

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

 // TODO: make this all threaded?
 // crop the image to the bounds provided
 img = [info objectForKey:UIImagePickerControllerOriginalImage];
 NSLog(@"orig image size: %@", [[NSValue valueWithCGSize:img.size] description]);

 // save the image, only if it's a newly taken image:
 if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) {
     UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
 }

 // self.image_View.image = img;
 // self.image_View.contentMode = UIViewContentModeScaleAspectFit;

NSLog(@"Picker has returned");
[self dismissViewControllerAnimated:YES
                         completion:^{
                            ModalViewController *sampleView = [[ModalViewController alloc] init];
                            [self presentModalViewController:sampleView animated:YES];
                         }];
}

答案 2 :(得分:0)

[self presentModalViewController:workspace animated:YES];
if (![[self modalViewController] isBeingPresented]) {
      [self dismissModalViewControllerAnimated:YES];
}