Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 关闭后调用viewdidload解除子viewcontroller_Ios_Swift_Uiviewcontroller - Fatal编程技术网

Ios 关闭后调用viewdidload解除子viewcontroller

Ios 关闭后调用viewdidload解除子viewcontroller,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我有一个主视图控制器和一个子视图控制器 我意识到在关闭Childviewcontroller时,如下所示: self.dismissViewControllerAnimated(true, completion: { self.dismissViewControllerAnimated(true, completion: nil); }); 它将关闭子视图控制器,我可以看到主视图控制器。不处理其他代码 如果关闭子viewcontrolle

我有一个主视图控制器和一个子视图控制器

我意识到在关闭Childviewcontroller时,如下所示:

        self.dismissViewControllerAnimated(true, completion: {
            self.dismissViewControllerAnimated(true, completion: nil);
        });
它将关闭子视图控制器,我可以看到主视图控制器。不处理其他代码

如果关闭子viewcontroller并通知主viewcontroller:

                self.dismissViewControllerAnimated(true, completion: {
                    NSNotificationCenter.defaultCenter().postNotificationName("refreshtextviewer_with_bookmark", object: nil);
                    self.dismissViewControllerAnimated(true, completion: nil);

                });
然后在主viewcontroller中调用我的refreshtextviewer_with_bookmark()函数,并同时调用标准viewDidLoad()


在本例中,在解除子viewcontroller后调用viewDidLoad()是否正常?有什么方法可以防止这种情况发生吗?

不应该在解雇后调用。经过测试,但实际上没有调用

下面是一个简单的例子:

母公司

class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() println(__FUNCTION__) NSNotificationCenter.defaultCenter().addObserver(self, selector: "refreshtextviewer_with_bookmark", name: "refreshtextviewer_with_bookmark", object: nil) } deinit { NSNotificationCenter.defaultCenter().removeObserver(self) } @IBAction func buttonTap(sender: AnyObject) { let vc = self.storyboard?.instantiateViewControllerWithIdentifier("childVC") as! ChildViewController self.presentViewController(vc, animated: true, completion: nil) } func refreshtextviewer_with_bookmark() { println(__FUNCTION__) } } 类ViewController:UIViewController{ 重写func viewDidLoad(){ super.viewDidLoad() println(函数) NSNotificationCenter.defaultCenter().addObserver(self,选择器:“带书签的refreshtextviewer”,名称:“带书签的refreshtextviewer”,对象:nil) } 脱硝{ NSNotificationCenter.defaultCenter().removeObserver(自) } @iAction func按钮映射(发送方:AnyObject){ 将vc=self.storyboard?.instanceeviewcontrollerwhithidentifier(“childVC”)设为!ChildViewController self.presentViewController(vc,动画:true,完成:nil) } func refreshtextviewer_与_书签(){ println(函数) } } 孩子

类ChildViewController:UIViewController{ @iAction func exitTap(发送方:AnyObject){ dismissViewControllerAnimated(true,完成:{()->Void in NSNotificationCenter.defaultCenter().postNotificationName(“带有书签的refreshtextviewer”,对象:nil) }) } }
仅供参考,函数宏将替换为函数名。

哪个
视图加载
,父级还是子级?
refreshttextviewer\u和\u bookmark
的侦听器有什么代码?viewDidLoad调用主viewcontroller的。为了简化这个案例,我只在其中添加了一个println(“测试”),非常感谢您的测试。但对我来说确实如此。任何人都可以。看起来,新的主viewcontroller是在关闭子对象后启动的。我通过在viewDidLoad之后将Main中的一个变量(默认为false)设置为true来测试这一点。在取消子项并再次处理viewDidLoad后,变量再次为false。是否将其推入导航视图控制器?请发布你是如何从父母那里调用孩子的。我刚发现。我把通知弄得一团糟。在调用同一个childviewcontroller的两个主ViewController中,我有两个同名的通知。我对它们进行了唯一的重命名,现在它可以工作了。谢谢。我会接受的,因为问题和你们的答案都是正确的。 class ChildViewController: UIViewController { @IBAction func exitTap(sender: AnyObject) { self.dismissViewControllerAnimated(true, completion: { () -> Void in NSNotificationCenter.defaultCenter().postNotificationName("refreshtextviewer_with_bookmark", object: nil) }) } }