【问题标题】:Why app fall into infinite loop when setting a property?为什么应用程序在设置属性时会陷入无限循环?
【发布时间】:2014-07-29 17:47:24
【问题描述】:

1)这是我定义的自定义 UITableViewCell:

class UserTableViewCell: UITableViewCell {

    var ou: OU? {
    set(newOU) {

        println(newOU)

        self.ou = newOU
    }   
}

2) 我将 NSManagedObject 传递给单元格

let s = sth.filteredSetUsingPredicate(NSPredicate(format: "someAttribute = true"))
let ou: OU = s.anyObject() as OU
cell.ou = ou

3) 不断写出这个日志信息多次,就像应用陷入死循环一样。

可选((实体:OU;id:0x7a7e3590 ;数据: { 一些属性 = 1; }))

结论

基本上我只需要一个简单的存储属性,不需要任何花哨的东西:

class UserTableViewCell: UITableViewCell {

    var ou: OU?
}

【问题讨论】:

  • 发布错误信息。
  • 想想吧。您正在属性的设置器中设置属性。如果您只想在值更改时打印该值,请使用 willSet 或 didSet。
  • 关于#4 在 SWIFT 中提供 ?变量声明后表明它是可选的。我猜这就是日志所指的内容。您是否尝试过删除它并查看日志中是否仍然出现可选消息?

标签: ios core-data properties swift optional


【解决方案1】:

发生这种情况是因为您编写的 setter 调用了 setter。 self.ou = ... 再次调用setter,所以你得到了一个很好的无限递归。只要堆栈持续存在。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2017-11-08
    • 2010-11-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多