我正在尝试为NSManagedObjectContext save()操作编写一个可观察对象,但没有成功。该函数既不会触发onNext事件,也不会触发onCompleted事件,因此会立即被释放。当我调试断点时,它显示Disposables.create()和@escaping通知闭包在不同的线程上工作。请告诉我在下面的代码中我做错了什么,并帮助解决问题。
func save() -> Observable<Void> {
guard base.hasChanges else { return Observable.just(()) }
return Observable.create { observer -> Disposable in
var token: NSObjectProtocol?
token = NotificationCenter.default.addObserver(forName: .NSManagedObjectContextObjectsDidChange, object: self, queue: nil) { _ in
observer.onNext(()) /* Is executed on the other thread and is never called */
observer.onCompleted()
NotificationCenter.default.removeObserver(token!)
}
base.perform {
do {
try base.save()
} catch {
observer.onError(Error.some)
}
}
return Disposables.create() \* Immediately calls this func *\
}
}发布于 2021-01-23 17:29:28
func save() -> Observable<Void> {
guard base.hasChanges else { return Observable.just(()) }
return Observable.create { observer -> Disposable in
let queue = DispatchQueue(label: "Save")
queue.sync {
self.base.perform {
do {
try self.base.save()
observer.onNext(())
observer.onCompleted()
} catch {
observer.onError(NSManagedObjectContext.ReactiveError.save)
}
}
}
return Disposables.create()
}
}发布于 2021-01-23 08:55:40
在我看来,这应该是可行的:
func save() -> Observable<Void> {
Observable.create { observer in
base.perform {
do {
try base.save()
observer.onNext(())
observer.onCompleted()
}
catch {
observer.onError(error)
}
}
return Disposables.create()
}
}https://stackoverflow.com/questions/65853334
复制相似问题