谁的视图不在 window 层次结构中? Swift

Whose view is not in the window hierarchy? Swift

我想要显示一个 table 视图控制器。因此,我在下面 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")
        }


    }

问题是您正在关闭 UIActivityViewController,然后尝试从中呈现另一个视图控制器。相反,您想要的是从显示 activity 视图控制器的同一视图控制器中显示新的视图控制器。

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

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() 的块内,所以它明确表示应该呈现它的是自我。