按值删除领域对象
Delete Realm Object By Value
我开始为 IOS 尝试 Realm,所以我创建了两个 类:
文件模型
import Foundation
import RealmSwift
class FilesModel: Object {
@objc dynamic var id : Int = 0
@objc var fileName = ""
@objc dynamic var dateOfCreation = Date()
@objc dynamic var dateOfModification = Date()
@objc dynamic var type = ""
var file = List<Data>()
}
组模型
import Foundation
import RealmSwift
class GroupsModel: Object {
@objc dynamic var id : Int = 0
@objc dynamic var name = ""
@objc dynamic var dateOfCreation = Date()
@objc dynamic var dateOfModification = Date()
@objc dynamic var filesCount = Int()
var files = List<FilesModel>()
override static func primaryKey() -> String? {
return "id"
}
}
现在我正在将文件复制到组模型文件对象中,但我需要删除父对象。
将其视为我将文件移动到文件夹中的举动。
我所做的是将文件的副本保存到文件夹中,然后从文件夹外删除文件。
问题
当我删除文件夹外的文件时,它也会删除文件夹内的文件。
我对问题的理解
类 是引用类型,所以我正在复制引用。因此,当我删除引用时,它会从整个项目中删除该文件。
我已经尝试了很多解决方案,比如深拷贝和分离。
提前致谢。
问题是这条语句
I am moving files into the folder
虽然这可能是您想要执行的操作,但您正在移动的对象实际上并没有被移动。当您将托管对象添加到列表 属性 时,它会向对象添加一个 引用 ,而不是对象本身。
换句话说,当 FilesModel 添加到 GroupsModel 文件列表 属性 时,它是对对象的引用。如果删除 FilesModel,它也会从列表中消失。但是,将其从列表中删除不会更改原始对象。
但是,列表也可以包含 Embedded Objects - 嵌入对象只存在于它的父对象中。也许这是一个选择?
原来如此。这里有几个模型
class FileModel: EmbeddedObject {
@Persisted var fileName = ""
}
class GroupsModel: Object {
@Persisted var files = List<FilesModel>()
}
然后实例化一个组并向其中添加几个文件对象
let group = GroupsModel()
let f0 = FileModel()
f0.fileName = "some filename"
let f1 = FileModel()
f1.fileName = "another filename"
group.files.append(objectsIn: [f0, f1])
生成一个包含两个只出现在该组中的文件的组。
另一种选择是简单地复制对象
let objectCopy = MyObject(value: objectToCopy)
然后将 objectCopy 添加到您的群组模型中。但是同样,通过这样做,Realm 将实例化 objectCopy 并将其实际添加回 Realm(可能会覆盖原始对象)。
我开始为 IOS 尝试 Realm,所以我创建了两个 类:
文件模型
import Foundation
import RealmSwift
class FilesModel: Object {
@objc dynamic var id : Int = 0
@objc var fileName = ""
@objc dynamic var dateOfCreation = Date()
@objc dynamic var dateOfModification = Date()
@objc dynamic var type = ""
var file = List<Data>()
}
组模型
import Foundation
import RealmSwift
class GroupsModel: Object {
@objc dynamic var id : Int = 0
@objc dynamic var name = ""
@objc dynamic var dateOfCreation = Date()
@objc dynamic var dateOfModification = Date()
@objc dynamic var filesCount = Int()
var files = List<FilesModel>()
override static func primaryKey() -> String? {
return "id"
}
}
现在我正在将文件复制到组模型文件对象中,但我需要删除父对象。 将其视为我将文件移动到文件夹中的举动。 我所做的是将文件的副本保存到文件夹中,然后从文件夹外删除文件。
问题
当我删除文件夹外的文件时,它也会删除文件夹内的文件。
我对问题的理解
类 是引用类型,所以我正在复制引用。因此,当我删除引用时,它会从整个项目中删除该文件。
我已经尝试了很多解决方案,比如深拷贝和分离。 提前致谢。
问题是这条语句
I am moving files into the folder
虽然这可能是您想要执行的操作,但您正在移动的对象实际上并没有被移动。当您将托管对象添加到列表 属性 时,它会向对象添加一个 引用 ,而不是对象本身。
换句话说,当 FilesModel 添加到 GroupsModel 文件列表 属性 时,它是对对象的引用。如果删除 FilesModel,它也会从列表中消失。但是,将其从列表中删除不会更改原始对象。
但是,列表也可以包含 Embedded Objects - 嵌入对象只存在于它的父对象中。也许这是一个选择?
原来如此。这里有几个模型
class FileModel: EmbeddedObject {
@Persisted var fileName = ""
}
class GroupsModel: Object {
@Persisted var files = List<FilesModel>()
}
然后实例化一个组并向其中添加几个文件对象
let group = GroupsModel()
let f0 = FileModel()
f0.fileName = "some filename"
let f1 = FileModel()
f1.fileName = "another filename"
group.files.append(objectsIn: [f0, f1])
生成一个包含两个只出现在该组中的文件的组。
另一种选择是简单地复制对象
let objectCopy = MyObject(value: objectToCopy)
然后将 objectCopy 添加到您的群组模型中。但是同样,通过这样做,Realm 将实例化 objectCopy 并将其实际添加回 Realm(可能会覆盖原始对象)。