谁的视图不在窗口层次结构中?迅速

时间:2015-06-21 15:18:32

标签: ios swift optional

我想要显示一个表视图控制器。因此,我将视图控制器显示在下面的completionwithitemshandler属性中。

 let activityViewController = UIActivityViewController(activityItems:[memeedimage] , applicationActivities: nil)
        presentViewController(activityViewController, animated: true, completion: nil)

    activityViewController.completionWithItemsHandler = {
        (activity, success, returneditems, error) in
        println("Activity: \(activity) Success: \(success) Items: \(returneditems) Error: \(error)")
        self.save()
        activityViewController.dismissViewControllerAnimated(true, completion: nil)

        let memevc:MemeTableViewController  = MemeTableViewController()
        activityViewController.presentViewController(memevc, animated: true, completion: nil)
    }

但是我收到以下运行时错误:

Warning: Attempt to present <MemeMe.MemeTableViewController: 0x7fc4b6179600> on <UIActivityViewController: 0x7fc4b6148180> whose view is not in the window hierarchy!

所以我相信这与我展开具有可选数据类型的meme对象有关。

 func save(){
        var meme : MemeObject?
        if let memez = meme{
          meme = MemeObject(textFieldtop : texfieldtop.text! ,textFieldbottom : textfieldbottom.text!  ,image : imagePickerView.image! , memedImage : generateMemedImage())
            (UIApplication.sharedApplication().delegate as! AppDelegate).memes.append(meme!)
        }
        else{
            println("Optionals man")
        }


    }

1 个答案:

答案 0 :(得分:1)

问题是您正在解雇UIActivityViewController,然后尝试从中呈现另一个视图控制器。相反,您想要的是从您呈现活动视图控制器的同一视图控制器中呈现新的视图控制器。

例如,您可以在活动视图控制器关闭完成后显示新的视图控制器:

let activityViewController = UIActivityViewController(activityItems:[memeedimage] , applicationActivities: nil)
        presentViewController(activityViewController, animated: true, completion: nil)


    activityViewController.completionWithItemsHandler = {
        (activity, success, returneditems, error) in
        println("Activity: \(activity) Success: \(success) Items: \(returneditems) Error: \(error)")
        self.save()
        activityViewController.dismissViewControllerAnimated(true, completion: {
           let memevc:MemeTableViewController  = MemeTableViewController()
        self.presentViewController(memevc, animated: true, completion: nil)
})

注意:在你的初始“presentViewController”中,你不需要使用self.presentViewController(),但因为新的调用是在一个块中使用self.presentViewController()使得它明确表明它应该是自我呈现它。