我使用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
}
有什么想法吗?
答案 0 :(得分:0)
在每个带按钮的控制器中,您可以在init()中设置Realm通知。
// Observe Realm Notifications
let token = realm.addNotificationBlock { notification, realm in
tableView.reload()
}
您还可以在deinit()中设置删除Realm通知。
token.stop()
如果从应用程序堆栈中删除控制器,则下次显示它时,它将重新加载所有Realm元素 - 不应该导致问题。 如果控制器仍在应用程序堆栈中,它将检测通知并更新UI - 不应该导致问题。