我如何防止RealmSwift列表中的重复?
如何防止在RealmSwift
向列表添加重复RealmSwift
?
我将User
作为领域对象,但真正的数据源是服务器(只需使用Realm本地缓存用户)。 当我从我的服务器获取当前用户数据时,我想确保我在realm中存储的用户具有来自服务器的所有播放列表(以及它们与轨道列表等同步)。 我担心如果我从服务器循环遍历那些列表,附加到myUser.playlists
,我可能会myUser.playlists
将相同的播放列表添加到用户的播放列表列表中。
class User: Object { dynamic var name = "" dynamic var id = "" let playlists = List() override class func primaryKey() -> String { return "id" } } class Playlist: Object { dynamic var name = "" dynamic var id = "" let tracks = List() override class func primaryKey() -> String { return "id" } } class Song: Object { dynamic var title = "" let artists = List() dynamic var id = "" override class func primaryKey() -> String { return "id" } } class Artist: Object { dynamic var name = "" dynamic var id = "" override class func primaryKey() -> String { return "id" } }
这取决于来自服务器的数据类型。 如果始终显示整个播放列表数据(您始终可以替换现有的播放列表数据),则只需将列表删除为空,然后附加它们即可。
realm.write { user.playlists.removeAll() // empty playlists before adding for playlistData in allPlaylistData { let playlist = Playlist() ... user.playlists.append(playlist) } }
如果来自服务器的差异数据(也有一些是重复的),则必须检查数据是否已存在。
realm.write { for playlistData in allPlaylistData { let playlist = Playlist() ... realm.add(playlist, update: true) // Must add to Realm before check guard let index = user.playlists.indexOf(playlist) else { // Nothing to do if exists continue } user.playlists.append(playlist) } }
- UIDocumentInteractionController添加自定义操作菜单(例如电子邮件,保存到照片)
- iOS int总是返回0
- 在iPhone 4英寸的屏幕上,模拟器显示3.5英寸的屏幕。 请检查屏幕截图。 可能是什么问题?
- 有什么方法可以在代码中“等待……” – 就像空循环一样?
- iPhone显示旧版本的应用程序
- PHAsset + AFNetworking。 无法将file upload到真实设备上的服务器
- 如何用可点击的第一个单词创buildUILabel
- 如何获取CGPDFDictionaryRef键
- IOS:通过MFMailComposeController发送消息后,如何获取消息正文,主题和受众