“只能从其所属领域删除对象”-无法使用通用方法

时间:2019-09-20 09:43:23

标签: ios swift realm

我正在将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())
    }
}

0 个答案:

没有答案
相关问题