【问题标题】:Swift - ViewDidAppear called from another classSwift - 从另一个类调用 ViewDidAppear
【发布时间】:2014-12-09 10:15:14
【问题描述】:

我有一个带有两个视图的简单应用程序。当我启动到主视图时,会调用 viewDidLoadviewDidAppear。当我转到应用程序中的另一个视图时,它调用super.viewDidLoad 并调用函数,但它也从主视图调用viewDidAppear。我找不到任何命令来调用它(搜索整个代码库)。什么可能导致这个额外的调用?

* 额外测试 *

我添加了断点来查找问题。

1) 家庭调用:viewdidLoad,然后是 viewdidappear

2) 点击链接到详细视图

3) 这调用 deatailview viewdidload 调用超级(又名主页)视图确实加载

4) home view 确实加载完成,然后调用 home viewdidappear

5) 主页视图出现错误

任何想法为什么 home viewdidappear 之后被调用?

【问题讨论】:

  • 设置断点并观察。
  • @DarkDust 我在使用断点后更新了问题
  • 你又要回到主菜单了吗
  • 不,在 detailView super.viewDidLoad -> home[aka super] viewdidAppear 之后某处被调用

标签: ios xcode swift viewdidload viewdidappear


【解决方案1】:

正如您所提到的,“home”是您的“detail”视图控制器“deatailview super (aka home)”的超类。 您要么没有实现 viewDidAppear,要么在 'detail' vc 中调用了 super.viewDidAppear,因此执行了超类'(home vc's)viewDidAppear。

【讨论】:

  • 我还没有实现 viewWillAppear。我也从来没有听说过。我查一下
  • 对不起。我的意思是“viewDidAppear”被调用的方法。编辑了我的答案。无论如何,您必须了解所有视图控制器生命周期方法。
  • 解决方案是我可以通过使它们成为单独的视图控制器(不是子视图控制器,父视图)来轻松完成任务。这消除了呼叫父母的问题。现在清理我的代码
【解决方案2】:

父类代码

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.
}

-(void)viewDidAppear:(BOOL)animated{

    [super viewDidAppear:animated];
}

子类代码

- (void)viewDidLoad {

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}


-(void)viewDidAppear:(BOOL)animated{

    [super viewDidAppear:animated];
}

解释

当第一次加载超类视图时,主类是超类,子类是子类,它会调用超类的 viewDidLoad 和 viewDidAppear。 当我们点击链接时,它会移动到详细视图,它会调用 viewDidLoad(sub class)->viewDidLoad(super class) 和 viewDidAppear(sub class)->viewDidAppear(super class)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2016-10-12
    相关资源
    最近更新 更多