私はバックエンドからjsonを受け取って解析した後、私のUIを更新するUIViewを持っています。 一般的なAPIマネージャを使用しているため、コールバックの呼び出しが早すぎます。 私の回避策とベストプラクティスは、領域通知ブロックを使用することだと思います。 通知ブロックはviewDidLoadで一度呼び出されますが、jsonの解析後に領域オブジェクトプロパティを変更しても更新は呼び出されません。ビューのコードの サンプル:初期化後にレルム通知が呼び出されない
import SwiftyJson
import RealmSwift
public class Article : Object {
dynamic var liked = false
dynamic var id = String()
override public static func primaryKey() -> String? {
return "id"
}
// MARK: – Create article method
public class func article(json: JSON) -> Article? {
let article = Article()
if let id = json["id"].string {
article.id = id
}
if let liked = json["liked"].bool {
article.liked = liked
}
return article
}
// parse response Json for only one article after getting articleDetail
public class func parseUpdateArticleJson(json: JSON) {
//print(json)
do {
let realm = try Realm()
realm.beginWrite()
let article = self.article(json)
realm.add(article!, update: true)
try realm.commitWrite()
} catch {
print(error)
}
}
public class func getLocalArticle(articleId: String) -> Results<Article>? {
do {
let realm = try Realm()
let result = realm.objects(Article.self).filter("id == %@", articleId)
return result
} catch {
print(error)
}
return nil
}
}
のようなボタンをタップした後、私は自分のレルムを更新するバックエンドにアクションを送る私の見解で:レルムオブジェクトの
import SwiftyJson
import RealmSwift
var notificationToken: NotificationToken?
var article: Article?
if let result = Article.getLocalArticle(article!.id) {
// Observe Notifications on article from Network
notificationToken = result.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in
switch changes {
case .Initial:
break
case .Update:
print("updating")
self!.updateView()
case .Error(let error):
// An error occurred while opening the Realm file on the background worker thread
fatalError("\(error)")
break
}
}
}
サンプルオブジェクトがfavoriteプロパティをtrueに設定します(trueの場合はfalse)。 realmオブジェクトのlikeプロパティが更新されたときに、通知ブロックがupdateViewメソッドを呼び出すことが予想されます。 どのようなヒントも大歓迎です
ええ、何が起こっているのか分からずには分かりません。しかし、まず、レルム通知が実際に設定されているかどうかを確認します。あなたのコードは 'Article.getLocalArticle(article!.id)'から同じRealmオブジェクトを更新するバックエンドからJSONを解析するのですか? realm.write'ブロックにコードをラップするか、 'realm.commitWrite()'を使って書き込みをコミットすることで、realmオブジェクトへの更新を書いていますか? – KrispyDonuts
サンプルを更新しました。 答えは両方の質問に対して「はい」です。 –