CleanArchitectureRxSwift
CleanArchitectureRxSwift copied to clipboard
Coredata: how to call sync method for attribute<CDModalName>
For Model like CDMessage,
Why func sync not called when I try to save CDMessage data in core data.
CDConversation contained CDMessage, for reference I am sharing response below: { id : 23, message : { id : 123, text : "hello" } }
In CDModalName+ext.swift :
extension CDConversation {
public static var id: Attribute<String> { return Attribute("id")}
public static var last_message: Attribute<CDMessage> { return Attribute("message")}
}
extension Conversation: CoreDataRepresentable {
public typealias CoreDataType = CDConversation
func sync(in context: NSManagedObjectContext) -> Observable<CDConversation> {
let syncSelf = context.rx.sync(entity: self, update: update)
let syncLast_message = last_message!.sync(in: context).map(Optional.init)
return Observable.zip(syncSelf, syncLast_message, resultSelector: CDConversation.synced)
}
public func update(entity: CDConversation) {
entity.id = Int16(id)
} }
I have the same issue, the func sync(in context: NSManagedObjectContext) in the Core Data class extensions never called. The default sync function in the protocol extension is always called.
I solved the problem, you have to add the function to the protocol CoreDataRepresentable func sync(in context: NSManagedObjectContext) -> Observable<CoreDataType>