簡體   English   中英

Realm-iOS:模型對象在添加到領域時變為零

[英]Realm-iOS: Model object becomes nil when it's added to 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"]
  }
}

關閉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)
      }
    }
  }

您應該對文章對象保持強烈的引用。 從領域加載它們時,需要將它們保存在數組中。 如果您對領域的結果進行操作,則在方法TableViewCell setupFavIcon結束時釋放它們。

您可以使用weak參考selfdownloadFavIcon封閉,最有可能是被異步調用,所以你的對象可能已經釋放。 您需要在閉包中使用強引用或在某處保持對對象的強引用。

另請注意:如果將對象添加到Realm,則必須在寫入事務中完成對對象的所有更改(添加,修改和刪除)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM