NSManagedObject features are now fully supported for CoreStoreObject types. MacOSX 10.12 onwards now support ListMonitors and ObjectMonitors

This commit is contained in:
John Estropia
2017-04-07 20:14:13 +09:00
parent 4aa1a63f9a
commit c0ae129b22
58 changed files with 1172 additions and 803 deletions

View File

@@ -41,7 +41,7 @@ public extension BaseDataTransaction {
*/
public func importObject<T>(
_ into: Into<T>,
source: T.ImportSource) throws -> T? where T: NSManagedObject, T: ImportableObject {
source: T.ImportSource) throws -> T? where T: DynamicObject, T: ImportableObject {
CoreStore.assert(
self.isRunningInAllowedQueue(),
@@ -71,7 +71,7 @@ public extension BaseDataTransaction {
*/
public func importObject<T>(
_ object: T,
source: T.ImportSource) throws where T: NSManagedObject, T: ImportableObject {
source: T.ImportSource) throws where T: DynamicObject, T: ImportableObject {
CoreStore.assert(
self.isRunningInAllowedQueue(),
@@ -99,7 +99,7 @@ public extension BaseDataTransaction {
*/
public func importObjects<T, S: Sequence>(
_ into: Into<T>,
sourceArray: S) throws -> [T] where T: NSManagedObject, T: ImportableObject, S.Iterator.Element == T.ImportSource {
sourceArray: S) throws -> [T] where T: DynamicObject, T: ImportableObject, S.Iterator.Element == T.ImportSource {
CoreStore.assert(
self.isRunningInAllowedQueue(),
@@ -135,7 +135,7 @@ public extension BaseDataTransaction {
*/
public func importUniqueObject<T>(
_ into: Into<T>,
source: T.ImportSource) throws -> T? where T: NSManagedObject, T: ImportableUniqueObject {
source: T.ImportSource) throws -> T? where T: DynamicObject, T: ImportableUniqueObject {
CoreStore.assert(
self.isRunningInAllowedQueue(),
@@ -188,7 +188,7 @@ public extension BaseDataTransaction {
public func importUniqueObjects<T, S: Sequence>(
_ into: Into<T>,
sourceArray: S,
preProcess: @escaping (_ mapping: [T.UniqueIDType: T.ImportSource]) throws -> [T.UniqueIDType: T.ImportSource] = { $0 }) throws -> [T] where T: NSManagedObject, T: ImportableUniqueObject, S.Iterator.Element == T.ImportSource {
preProcess: @escaping (_ mapping: [T.UniqueIDType: T.ImportSource]) throws -> [T.UniqueIDType: T.ImportSource] = { $0 }) throws -> [T] where T: DynamicObject, T: ImportableUniqueObject, S.Iterator.Element == T.ImportSource {
CoreStore.assert(
self.isRunningInAllowedQueue(),

View File

@@ -48,7 +48,7 @@ import CoreData
}
```
*/
public protocol ImportableObject: class, NSObjectProtocol, AnyObject {
public protocol ImportableObject: class {
/**
The data type for the import source. This is most commonly an `NSDictionary` or another external source such as an `NSUserDefaults`.
@@ -71,15 +71,6 @@ public protocol ImportableObject: class, NSObjectProtocol, AnyObject {
- parameter transaction: the transaction that invoked the import. Use the transaction to fetch or create related objects if needed.
*/
func didInsert(from source: ImportSource, in transaction: BaseDataTransaction) throws
// MARK: Obsolete (`deprecated` only for reference, please use new methods)
@available(*, deprecated: 3.0.0, renamed: "shouldInsert(from:in:)")
static func shouldInsertFromImportSource(_ source: ImportSource, inTransaction transaction: BaseDataTransaction) -> Bool
@available(*, deprecated: 3.0.0, renamed: "didInsert(from:in:)")
func didInsertFromImportSource(_ source: ImportSource, inTransaction transaction: BaseDataTransaction) throws
}

View File

@@ -114,24 +114,6 @@ public protocol ImportableUniqueObject: ImportableObject {
- parameter transaction: the transaction that invoked the import. Use the transaction to fetch or create related objects if needed.
*/
func update(from source: ImportSource, in transaction: BaseDataTransaction) throws
// MARK: Obsolete (`deprecated` only for reference, please use new methods)
@available(*, deprecated: 3.0.0, renamed: "shouldInsert(from:in:)")
static func shouldInsertFromImportSource(_ source: ImportSource, inTransaction transaction: BaseDataTransaction) -> Bool
@available(*, deprecated: 3.0.0, renamed: "shouldUpdate(from:in:)")
static func shouldUpdateFromImportSource(_ source: ImportSource, inTransaction transaction: BaseDataTransaction) -> Bool
@available(*, deprecated: 3.0.0, renamed: "uniqueID(from:in:)")
static func uniqueIDFromImportSource(_ source: ImportSource, inTransaction transaction: BaseDataTransaction) throws -> UniqueIDType?
@available(*, deprecated: 3.0.0, renamed: "didInsert(from:in:)")
func didInsertFromImportSource(_ source: ImportSource, inTransaction transaction: BaseDataTransaction) throws
@available(*, deprecated: 3.0.0, renamed: "update(from:in:)")
func updateFromImportSource(_ source: ImportSource, inTransaction transaction: BaseDataTransaction) throws
}
@@ -191,22 +173,25 @@ public extension ImportableUniqueObject {
// MARK: - ImportableUniqueObject (Default Implementations)
public extension ImportableUniqueObject where Self: NSManagedObject {
public extension ImportableUniqueObject where Self: DynamicObject {
var uniqueIDValue: UniqueIDType {
get {
return UniqueIDType.cs_fromImportableNativeType(
self.value(forKey: type(of: self).uniqueIDKeyPath) as! UniqueIDType.ImportableNativeType
)!
return self.cs_toRaw().getValue(
forKvcKey: type(of: self).uniqueIDKeyPath,
didGetValue: { UniqueIDType.cs_fromImportableNativeType($0 as! UniqueIDType.ImportableNativeType)! }
)
}
set {
self.setValue(
newValue.cs_toImportableNativeType(),
forKey: type(of: self).uniqueIDKeyPath
)
self.cs_toRaw()
.setValue(
newValue,
forKvcKey: type(of: self).uniqueIDKeyPath,
willSetValue: { $0.cs_toImportableNativeType() }
)
}
}
}