从多个位置更新UI状态

时间:2017-03-22 14:53:16

标签: ios swift uibutton realm

我使用Realm并且我有一个List,其中的每个对象都有一个isFavorite bool属性来跟踪用户是否收藏了该对象。挑战在于,用户可以从应用中的多个位置更改此属性。

有一个心形按钮(用于收藏),一个简单的UIButton,在应用中的3个位置 - >在点击其中一个按钮的任何时候,该对象中的属性isFavorite都会更新。现在,当我点击其中一个按钮时,我不确定如何在应用的所有位置更新UIButton的图像。

例如,有一个ViewController在UIButton中设置心形按钮(viewDidLoad) - 因此只设置一次。如果在另一个ViewController中点击另一个心形按钮,该按钮的状态将如何更新?注意:List用于填充collectionView,其中每个单元格中都有最喜欢的按钮。如果您点击一个单元格,它将转到另一个视图控制器并显示所选的Image对象

我认为解决方案是使用Realm设置某种形式的通知。我观看了此视频,但仍不确定如何执行此操作:https://realm.io/news/meetup-jp-simard-mastering-realm-notifications/

以下是模型对象,请注意具有Image属性的isFavorite个对象数组:

import RealmSwift

/// Model class that manages the ordering of `Image` objects
final class ImageList: Object {
    let images = List<Image>()
}

/// Model class for the `Image` objects
final class Image: Object {
    dynamic var isFavorite = false
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在每个带按钮的控制器中,您可以在init()中设置Realm通知。

// Observe Realm Notifications
let token = realm.addNotificationBlock { notification, realm in
    tableView.reload()
}

您还可以在deinit()中设置删除Realm通知。

token.stop()

如果从应用程序堆栈中删除控制器,则下次显示它时,它将重新加载所有Realm元素 - 不应该导致问题。 如果控制器仍在应用程序堆栈中,它将检测通知并更新UI - 不应该导致问题。