我正在将Article
保存在Realm
中,当我想删除它时会发生问题。我收到错误消息“只能从其所属的领域删除对象”
struct Article: Codable {
let url: String
private(set) var isSaved: Bool = false
mutating func save(completed: @escaping (() -> Void) ) {
DispatchQueue(label: "background").async {
autoreleasepool {
let container = try! Container()
try! container.write { transaction in
transaction.add(self)
self.isSaved = true
completed()
}
}
}
}
mutating func delete(completed: @escaping (() -> Void) ) {
DispatchQueue(label: "background").async {
autoreleasepool {
let container = try! Container()
try! container.write { transaction in
if let article = objectsToDelete.results.first {
self.isSaved = false
transaction.delete(self)
completed()
}
}
}
}
}
}
用于处理Realm
的样板代码
final class ArticleObject: Object {
@objc dynamic var url: String = ""
override static func primaryKey() -> String? {
return "url"
}
}
extension Article: Persistable {
public init(managedObject: ArticleObject) {
url = managedObject.url
}
public func managedObject() -> ArticleObject {
let article = ArticleObject()
article.url = url
return article
}
}
extension Article {
public enum Query: QueryType {
case url(String)
public var predicate: NSPredicate? {
switch self {
case .url(let value):
return NSPredicate(format: "url == %@",
value)
}
}
public var sortDescriptors: [SortDescriptor] {
return [SortDescriptor(keyPath: "url")]
}
}
}
我的Real图层类具有删除对象的通用方法,但我必须专门构建第三个对象。
public final class WriteTransaction {
private let realm: Realm
internal init(realm: Realm) {
self.realm = realm
}
public func add<T: Persistable>(_ value: T, update: Bool = false) {
realm.add(value.managedObject(), update: update)
}
func delete<T: Persistable>(_ value: T) {
realm.delete(value.managedObject())
}
}