首页 文章

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

提问于
浏览
3

这是一个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"]
  }
}

关闭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 回答

  • 2

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

  • 1

    downloadFavIcon 闭包中使用 weak 引用 downloadFavIcon 很可能是异步调用的,因此您的对象可能已经被释放 . 您需要在闭包中使用强引用或在某处保持对对象的强引用 .

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

相关问题