sergdort / CleanArchitectureRxSwift

Example of Clean Architecture of iOS app using RxSwift

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Coredata: how to call sync method for attribute<CDModalName>

iamitksharma opened this issue · comments

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