Realm-iOS:模型对象在添加到领域时变为零

时间:2016-11-13 14:15:46

标签: ios swift realm

这是一个RSS阅读器应用程序。我实例化我的模型对象,在其上调用setupFavIcon()以下载创建对象时为nil的favIcon。然后我将每个对象添加到领域。但是当实际获取图标时,self为零,因此我无法更新应用程序的UI。我不明白自己为什么变成零。

class Article: Object {
  dynamic var source = ""
  dynamic var title = ""
  dynamic var link = ""
  dynamic var pubDate = Date()
  dynamic var favIcon: Data?

  dynamic var favIconDidLoad: (() -> ())?

  func setupFavIcon(_ source: String) {
    DownloadManager.sharedInstance.downloadFavIcon(source) { [weak self] icon in
      if let icon = icon {
        self?.favIcon = icon
        self?.favIconDidLoad?()
      }
    }
  }

  override class func primaryKey() -> String? {
    return "link"
  }

  override class func ignoredProperties() -> [String] {
    return ["favIconDidLoad"]
  }
}

Closure favIconDidLoad在我的TableViewCell类中定义,并在下载favIcon时调用。

  fileprivate func setupFavIcon(_ article: Article) {
    if let favicon = article.favIcon {
      setFavIcon(favicon)
    } else {
      article.favIconDidLoad = { [weak self] in
        self?.setFavIcon(article.favIcon)
      }
    }
  }

2 个答案:

答案 0 :(得分:2)

您应该对文章对象保持强烈的引用。从领域加载它们时,需要将它们保存在数组中。如果您对领域的结果进行操作,则在方法TableViewCell setupFavIcon结束时释放它们。

答案 1 :(得分:1)

您在weak闭包中self引用downloadFavIcon,这很可能是异步调用的,因此您的对象可能已被解除分配。您需要在闭包中使用强引用或在某处保留对对象的强引用。

另请注意:如果将对象添加到Realm,则必须在写入事务中完成对对象的所有更改(添加,修改和删除)。