22{% macro relationValueRead relation %}{% if relation.toMany %}(__managedObject.{{ relation.name }}?.{% if relation.isOrdered %}array{% else %}allObjects{% endif %} as? [{{ relation.destinationClassName }}]){% else %}__managedObject.{{ relation.name }}{% endif %}{% endmacro %}
33
44import CoreData
5+ {% if arguments.dbModuleName %}import {{ arguments.dbModuleName }}{% endif +%}
56
67class UMDObject {}
78
@@ -12,7 +13,7 @@ protocol UMDObjectConvertable {
1213
1314private let umdTransformMap = [
1415{% for entity in entities %}
15- "{{ entity.className }}": { (object: NSManagedObject) -> UMDObject in return {{ entity.className }}.umdObject(object as! {{ entity.className }}) },
16+ "{{ entity.className }}": { (object: NSManagedObject) -> UMDObject in return {%+ if arguments.dbModuleName %}{{ arguments.dbModuleName }}.{% endif %}{{ entity.className }}.umdObject(object as! {%+ if arguments.dbModuleName %}{{ arguments.dbModuleName }}.{% endif %} {{ entity.className }}) },
1617{% endfor %}
1718]
1819
@@ -34,30 +35,33 @@ extension Array where Element == NSManagedObject {
3435
3536{% for entity in entities %}
3637
37- extension UMDObjectConvertable where Self == {{ entity.className }} {
38+ extension UMDObjectConvertable where Self == {%+ if arguments.dbModuleName %}{{ arguments.dbModuleName }}.{% endif %}{ { entity.className }} {
3839 func umdObject() -> UMD{{ entity.name }} { (self as NSManagedObject).umdObject() as! UMD{{ entity.name }} }
3940}
4041
41- extension {{ entity.className }} {
42- class func umdObject(_ object: {{ entity.className }}) -> UMD{{ entity.name }} { UMD{{ entity.name }}(object) }
42+ extension {%+ if arguments.dbModuleName %}{{ arguments.dbModuleName }}.{% endif %}{ { entity.className }} {
43+ class func umdObject(_ object: {%+ if arguments.dbModuleName %}{{ arguments.dbModuleName }}.{% endif %}{ { entity.className }}) -> UMD{{ entity.name }} { UMD{{ entity.name }}(object) }
4344}
4445
45- extension Array where Element == {{ entity.className }} {
46+ extension Array where Element == {%+ if arguments.dbModuleName %}{{ arguments.dbModuleName }}.{% endif %}{ { entity.className }} {
4647 func umdObject() -> [UMD{{ entity.name }}] { map { ($0 as NSManagedObject).umdObject() as! UMD{{ entity.name }} } }
4748}
4849
4950{% endfor %}
5051
5152{% for entity in entities %}
5253// unmanageddata:file:UMD{{ entity.name }}.generated.swift
54+ import Combine
5355import CoreData
5456import Foundation
57+ {% if arguments.dbModuleName %}import {{ arguments.dbModuleName }}{% endif +%}
5558
5659class UMD{{ entity.name }}{% if entity.parentName %}: UMD{{ entity.parentName }}{% else %}: UMDObject{% endif %} {
5760 private let __managedObject: {{ entity.className }}
5861 private let __context: NSManagedObjectContext
5962 {% if not entity.parentName %}
6063 private var __observer: NSObjectProtocol?
64+ public let didChangePublisher: PassthroughSubject<Void, Never> = PassthroughSubject()
6165 {% endif %}
6266
6367 // MARK: - Attributes
@@ -120,7 +124,7 @@ class UMD{{ entity.name }}{% if entity.parentName %}: UMD{{ entity.parentName }}
120124 }
121125
122126 private func subsribeContext() {
123- __observer = NotificationCenter.default.addObserver(forName: .NSManagedObjectContextObjectsDidChange , object: __context, queue: nil) { [weak self] notification in
127+ __observer = NotificationCenter.default.addObserver(forName: .NSManagedObjectContextDidSaveObjectIDs , object: __context, queue: nil) { [weak self] notification in
124128 self?.process(notification: notification)
125129 }
126130 }
@@ -137,21 +141,21 @@ class UMD{{ entity.name }}{% if entity.parentName %}: UMD{{ entity.parentName }}
137141 var hasChanges: Bool = false
138142 var isDeleted: Bool = false
139143
140- if hasChanges == false, let objects = notification.userInfo?[NSUpdatedObjectsKey ] as? NSSet {
141- if objects.first(where: { ($0 as? NSManagedObject)?.objectID == objectID }) != nil {
144+ if hasChanges == false, let objects = notification.userInfo?[NSUpdatedObjectIDsKey ] as? Set<NSManagedObjectID> {
145+ if objects.first(where: { $0 == objectID }) != nil {
142146 hasChanges = true
143147 }
144148 }
145149
146- if hasChanges == false, let objects = notification.userInfo?[NSDeletedObjectsKey ] as? NSSet {
147- if objects.first(where: { ($0 as? NSManagedObject)?.objectID == objectID }) != nil {
150+ if hasChanges == false, let objects = notification.userInfo?[NSDeletedObjectIDsKey ] as? Set<NSManagedObjectID> {
151+ if objects.first(where: { $0 == objectID }) != nil {
148152 hasChanges = true
149153 isDeleted = true
150154 }
151155 }
152156
153- if hasChanges == false, let objects = notification.userInfo?[NSRefreshedObjectsKey ] as? NSSet {
154- if objects.first(where: { ($0 as? NSManagedObject)?.objectID == objectID }) != nil {
157+ if hasChanges == false, let objects = notification.userInfo?[NSRefreshedObjectIDsKey ] as? Set<NSManagedObjectID> {
158+ if objects.first(where: { $0 == objectID }) != nil {
155159 hasChanges = true
156160 }
157161 }
@@ -167,7 +171,9 @@ class UMD{{ entity.name }}{% if entity.parentName %}: UMD{{ entity.parentName }}
167171
168172 public func willChange() {}
169173
170- public func didChange() {}
174+ public func didChange() {
175+ didChangePublisher.send()
176+ }
171177
172178 public func didDelete() {}
173179 {% endif %}
0 commit comments