[英]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
參考self
在downloadFavIcon
封閉,最有可能是被異步調用,所以你的對象可能已經釋放。 您需要在閉包中使用強引用或在某處保持對對象的強引用。
另請注意:如果將對象添加到Realm,則必須在寫入事務中完成對對象的所有更改(添加,修改和刪除)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.