【问题标题】:Console warning: Attempt to dismiss from view controller while a presentation or dismiss is in progress控制台警告:在演示或关闭过程中尝试从视图控制器中关闭
【发布时间】:2014-07-14 20:28:00
【问题描述】:

“警告:在演示或关闭过程中尝试从视图控制器中关闭!”

我正在尝试让我的应用在选择要上传的图片后进入加载屏幕。这可以通过在选择图片时删除 UIImagePickerController 场景,添加 Loading 场景,并在上传完成后删除 Loading 场景来实现。

-(void)uploadMessage{

[self dismissViewControllerAnimated:NO completion:nil];


LoadingViewController *loadView = [[LoadingViewController alloc]initWithNibName:@"LoadView" bundle:nil];

    [self presentViewController:loadView animated:NO completion:^{

    NSData *fileData;
    NSString *fileName;
    NSLog(@"Image");
    fileData = UIImagePNGRepresentation(self.image);
    fileName = @"image.png";


PFFile *file = [PFFile fileWithName:fileName data:fileData];
[self.game setObject:file forKey:@"picture"];
[self.game saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
    if(succeeded){
     [self removeAndChangeButtons];
        [self dismissViewControllerAnimated:NO completion:nil];

    }

    }];
}];

}

【问题讨论】:

  • 你真的需要在新的视图控制器中显示加载吗?仅显示进度HUD并让上传在另一个线程上进行怎么样。一切都可以在同一个控制器中完成。即使它需要是一个完整的页面 HUD,您也可以创建一个子视图并显示您想要的任何加载状态。也建议使用故事板而不是笔尖
  • 好的,我会调查的。我最初在我的故事板中使用了它,但是它有非常奇怪/错误的行为。屏幕会滞后,然后加载黑色。

标签: ios


【解决方案1】:

您可以使用MBProgressHUD 添加函数。

- (void) showMessage:(NSString*)message withTitle:(NSString*)title onView:(UIView*)view removeAfter:(NSTimeInterval)delay{

dispatch_async(dispatch_get_main_queue(), ^{

    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:view animated:YES];
    // Configure for text only and offset down
    hud.mode = MBProgressHUDModeText;
    hud.labelText = title;

    hud.detailsLabelText = message;
    hud.margin = 10.f;
    hud.yOffset = 0.0f;
    hud.removeFromSuperViewOnHide = YES;
    [hud hide:YES afterDelay:delay];

});

}

然后在你的代码中,当你启动后台任务时,调用 showMessage 然后上传完成,删除它。

【讨论】:

  • 没有用那个方法但是MBProgressHUD很棒!非常感谢!!
【解决方案2】:

如果成功,您将在方法中两次关闭 ViewController。显然,这是做不到的。我不知道你到底想要达到什么目的,但我认为删除第一个 [self dismissViewControllerAnimated:NO completion:nil] 就可以了。

【讨论】:

  • 对不起,我想一种方法并不能真正解释发生了什么。基本上,用户会看到一个视图,该视图有一个按钮来选择一张图片或稍后再选择一张。如果他们按下按钮选择图片,UIImagePickerController 会模态呈现。当用户选择一个文件时, UIImagePickerController 被关闭并显示加载视图。文件上传后,加载视图将被关闭,并显示他们开始时屏幕的修改版本。
  • 因此删除该行警告加载视图试图显示在主视图控制器上,其主视图不在窗口层次结构中。 “警告:尝试在 上显示 ,其视图不在窗口层次结构中!”
  • 好吧,这是一个与这个问题无关的错误,但它解决了你描述的错误,因为错误消失了。无论实施如何,您都无法执行只能执行一次、两次的操作。
猜你喜欢
  • 2013-06-28
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多