首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用iOS编写的应用程序在返回视图时会崩溃

用iOS编写的应用程序在返回视图时会崩溃
EN

Stack Overflow用户
提问于 2016-01-16 18:02:44
回答 2查看 553关注 0票数 0

我正在编写一个应用程序,它加载一个选项屏幕(场景1),用户将在其中填写一些文本字段,然后切换到一个新的场景(场景2)。在用户完成场景2之后,用户可以单击一个按钮,将他们重新划分回场景1,再次填写选项。在场景1中,我将第一个文本字段设置为第一个响应器,这样在视图加载时键盘就会自动显示。

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()
    self.numeratorBegin.becomeFirstResponder()

    // Do any additional setup after loading the view.
}

当应用程序加载时,这个功能非常好。键盘出现,光标在numeratorBegin文本字段中。然而,当用户完成场景2并按下按钮回到场景1时,应用程序就会崩溃。在viewDidLoad中没有设置第一个响应程序时,不会发生崩溃。调试器显示以下导致消息线程1崩溃的行: EXC_BAD_ACCESS(Code=2,address=hexHere)

代码语言:javascript
复制
class AppDelegate: UIResponder, UIApplicationDelegate {

这样做的目的是让numeratorBegin文本字段在每次加载视图时成为第一个响应者。对于我的生活,我不知道为什么这个应用会崩溃。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-17 05:35:25

在阿兰·T的回答中再加几个点。

而不是

self.numeratorBegin.becomeFirstResponder()内部override func viewDidLoad()

将其添加到override func viewWillAppear()

self.numeratorBegin.resignFirstResponder()内部的override func viewWillDisappear()

如果尝试在其他线程中使用becomeFirstResponder()/resignFirstResponder(),则会导致崩溃。因此,最好遵循上述方法,这些方法总是在主线程中执行。

票数 0
EN

Stack Overflow用户

发布于 2016-01-17 04:16:24

我怀疑becomeFirstResponder设置了一些依赖于视图层次结构的内部状态/变量。当调用viewDidLoad()时,还没有设置视图层次结构,因此这些状态可能会以某种方式被扭曲,并影响某些UI组件的发布周期。

您应该在viewWillAppear中调用viewWillAppear。视图层次结构在这一点上已经就绪。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34830287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档