Я сохраняю 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()
}
}
}
}
}
}
Код Boiler Plate для обработки 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())
}
}