未调用奇怪的行为 viewDidAppear
strange behaviours viewDidAppear not called
我调用了一个函数来从我的父视图中打开一个子视图。
我看到 viewDidLoad
被调用了。在我的 viewDidLoad
中没有代码。
奇怪的是,即使我没有更改任何代码,有时 viewDidAppear:
也不会被调用。
当然可以有很多原因,但我不知道如何调试。我正在寻找一种方法来找出进程在 viewDidLoad
完成时挂起的位置。
有没有人给我提示或者有谁知道可能是什么问题?我的意思是有时它有时不工作。 viewDidAppear:
是父视图依赖还是子视图有问题?
func showSubview() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("Subview") as! SubViewController
self.presentViewController(vc, animated: true, completion: nil)
//self.showViewController(vc, sender: self);
}
更新
我从异步任务中调用 showSubview,我想这不太好。你怎么看,我该如何做得更好? dispatch_async 是否有任何完成处理程序?
dispatch_async(backgroundQueue, {
dosomething_long();
showSubview();
})
更新 2
问题是,我正在从后台任务中打开子视图。我不应该这样做。但问题是当后台任务完成时我如何调用子视图。 dispatch_async 调用是否有任何完成处理程序?
在甘道夫的帮助下解决
我很笨:-)我应该在主线程中调用子视图:
dispatch_async(backgroundQueue, {
dosomething_long();
dispatch_async(dispatch_get_main_queue(), {
showsubview();
});
})
问题是;视图是之前创建的吗?是您从后台重新打开您的应用程序时引起的吗?
您可以从这里检查生命周期,我认为您的问题是因此而发生的。
iOS 7 - Difference between viewDidLoad and viewDidAppear
程序计数器可能无法进入方法内部的一个非常明显的原因是应用程序可能 运行 处于 release
模式。
现在,我们可以在更新问题后看到,这不是原因,UI 操作发生在 background queue
。
根据 iOS 开发指南,所有 UI 操作都应该发生在 main thread
上,您应该尝试在主线程上执行它而不是 background thread
.
试试下面的代码:
dispatch_async(backgroundQueue, {
dosomething_long();
dispatch_async(dispatch_get_main_queue(), {
showsubview();
});
})
我调用了一个函数来从我的父视图中打开一个子视图。
我看到 viewDidLoad
被调用了。在我的 viewDidLoad
中没有代码。
奇怪的是,即使我没有更改任何代码,有时 viewDidAppear:
也不会被调用。
当然可以有很多原因,但我不知道如何调试。我正在寻找一种方法来找出进程在 viewDidLoad
完成时挂起的位置。
有没有人给我提示或者有谁知道可能是什么问题?我的意思是有时它有时不工作。 viewDidAppear:
是父视图依赖还是子视图有问题?
func showSubview() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("Subview") as! SubViewController
self.presentViewController(vc, animated: true, completion: nil)
//self.showViewController(vc, sender: self);
}
更新 我从异步任务中调用 showSubview,我想这不太好。你怎么看,我该如何做得更好? dispatch_async 是否有任何完成处理程序?
dispatch_async(backgroundQueue, {
dosomething_long();
showSubview();
})
更新 2 问题是,我正在从后台任务中打开子视图。我不应该这样做。但问题是当后台任务完成时我如何调用子视图。 dispatch_async 调用是否有任何完成处理程序?
在甘道夫的帮助下解决
我很笨:-)我应该在主线程中调用子视图:
dispatch_async(backgroundQueue, {
dosomething_long();
dispatch_async(dispatch_get_main_queue(), {
showsubview();
});
})
问题是;视图是之前创建的吗?是您从后台重新打开您的应用程序时引起的吗? 您可以从这里检查生命周期,我认为您的问题是因此而发生的。 iOS 7 - Difference between viewDidLoad and viewDidAppear
程序计数器可能无法进入方法内部的一个非常明显的原因是应用程序可能 运行 处于 release
模式。
现在,我们可以在更新问题后看到,这不是原因,UI 操作发生在 background queue
。
根据 iOS 开发指南,所有 UI 操作都应该发生在 main thread
上,您应该尝试在主线程上执行它而不是 background thread
.
试试下面的代码:
dispatch_async(backgroundQueue, {
dosomething_long();
dispatch_async(dispatch_get_main_queue(), {
showsubview();
});
})