ios - NSLayoutConstraint VFL 由于 EXC_BAD_ACCESS 崩溃

标签 ios swift dictionary uikit nslayoutconstraint

我正在开发的应用程序有很多视觉格式的限制。在一次操作中集中一些网络请求后,我开始遇到 EXC_BAD_ACCESS 崩溃。如果我通过 NSLayoutConstraint(item....) 初始值设定项手动创建约束,则不会发生任何崩溃。

这是我的代码中发生崩溃的行:

enter image description here

这是崩溃日志: enter image description here

什么可能导致这次崩溃?以及如何修复它?

最佳答案

在创建 NSLayoutConstraints 数组然后从数组中一次性激活所有内容时,我遇到了同样的问题。

当您导航离开某个 View 然后返回该 View 时,有时该 View 可能会分配给不同的内存分配并导致错误访问错误。

事情是这样的。每次 View 加载时,新的约束都会添加到数组中(假设您添加它们并从 .viewDidLoad() 函数或每次 View 再次可见时加载的类似函数激活它们)。

当您离开数组时,数组不会自行清空,因此旧的约束也保留在数组中。当您导航回 View 并尝试激活约束时,系统会尝试再次激活旧约束(它们引用的内存不再包含约束所引用的任何 View )。

要解决此问题,请在向数组添加新约束之前对数组调用 .RemoveAll()。这将确保所有旧的约束都被删除,并且系统不会尝试激活它们。

这是一个例子。

var initialConstraints = [NSLayoutConstraint]()

    override func viewDidLoad() {
    super.viewDidLoad()

    // Empty the array once the view loads
    initialConstraints.removeAll()

    // Add your constraints like normal
    initialConstraints.append(...)

    // Activate your constraints once you've added them to the array (like normal)
    NSLayoutConstraint.activate(initialConstraints)

}

希望这有帮助!

关于ios - NSLayoutConstraint VFL 由于 EXC_BAD_ACCESS 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40244582/

相关文章:

ios - 如何使用自动布局保持 UITableViewCell 的纵横比?

python - 如何更改字典的键和值

parsing - OpenOffice 词典的格式是什么?

ios - UICollectionView 第一个单元格未正确对齐

ios - Swift:将 tableCell 转换为变量类

ios - subview 的框架在呈现 View Controller 后更新

ios - 将单词快速转换为 phoneme for iphone (ios)

c++ - 将类插入 STL 映射时出现“没有匹配的调用函数”错误

ios - UIPageViewController 显示黑屏

ios - 刷新 UICollectionview