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

@@ -40,7 +40,7 @@ public extension CSBaseDataTransaction {
@objc
public func fetchExistingObject(_ object: NSManagedObject) -> Any? {
return self.bridgeToSwift.context.fetchExisting(object)
return self.bridgeToSwift.context.fetchExisting(object) as NSManagedObject?
}
/**
@@ -52,7 +52,7 @@ public extension CSBaseDataTransaction {
@objc
public func fetchExistingObjectWithID(_ objectID: NSManagedObjectID) -> Any? {
return self.bridgeToSwift.context.fetchExisting(objectID)
return self.bridgeToSwift.context.fetchExisting(objectID) as NSManagedObject?
}
/**
@@ -64,7 +64,7 @@ public extension CSBaseDataTransaction {
@objc
public func fetchExistingObjects(_ objects: [NSManagedObject]) -> [Any] {
return self.bridgeToSwift.context.fetchExisting(objects)
return self.bridgeToSwift.context.fetchExisting(objects) as [NSManagedObject]
}
/**
@@ -76,7 +76,7 @@ public extension CSBaseDataTransaction {
@objc
public func fetchExistingObjectsWithIDs(_ objectIDs: [NSManagedObjectID]) -> [Any] {
return self.bridgeToSwift.context.fetchExisting(objectIDs)
return self.bridgeToSwift.context.fetchExisting(objectIDs) as [NSManagedObject]
}
/**

View File

@@ -27,10 +27,9 @@ import Foundation
import CoreData
#if os(iOS) || os(watchOS) || os(tvOS)
// MARK: - CSCoreStore
@available(OSX 10.12, *)
public extension CSCoreStore {
/**
@@ -112,5 +111,3 @@ public extension CSCoreStore {
)
}
}
#endif

View File

@@ -27,10 +27,9 @@ import Foundation
import CoreData
#if os(iOS) || os(watchOS) || os(tvOS)
// MARK: - CSDataStack
@available(OSX 10.12, *)
public extension CSDataStack {
/**
@@ -42,10 +41,7 @@ public extension CSDataStack {
@objc
public func monitorObject(_ object: NSManagedObject) -> CSObjectMonitor {
return bridge {
self.bridgeToSwift.monitorObject(object)
}
return self.bridgeToSwift.monitorObject(object).bridgeToObjectiveC
}
/**
@@ -66,18 +62,15 @@ public extension CSDataStack {
fetchClauses.contains { $0 is CSOrderBy },
"A CSListMonitor requires a CSOrderBy clause."
)
return bridge {
ListMonitor(
dataStack: self.bridgeToSwift,
from: from.bridgeToSwift,
sectionBy: nil,
applyFetchClauses: { (fetchRequest) in
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
}
)
}
return ListMonitor(
dataStack: self.bridgeToSwift,
from: from.bridgeToSwift,
sectionBy: nil,
applyFetchClauses: { (fetchRequest) in
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
}
).bridgeToObjectiveC
}
/**
@@ -132,18 +125,15 @@ public extension CSDataStack {
fetchClauses.contains { $0 is CSOrderBy },
"A CSListMonitor requires an CSOrderBy clause."
)
return bridge {
ListMonitor(
dataStack: self.bridgeToSwift,
from: from.bridgeToSwift,
sectionBy: sectionBy.bridgeToSwift,
applyFetchClauses: { (fetchRequest) in
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
}
)
}
return ListMonitor(
dataStack: self.bridgeToSwift,
from: from.bridgeToSwift,
sectionBy: sectionBy.bridgeToSwift,
applyFetchClauses: { (fetchRequest) in
fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest as! NSFetchRequest<NSFetchRequestResult>) }
}
).bridgeToObjectiveC
}
/**
@@ -179,5 +169,3 @@ public extension CSDataStack {
)
}
}
#endif

View File

@@ -40,7 +40,7 @@ public extension CSDataStack {
@objc
public func fetchExistingObject(_ object: NSManagedObject) -> Any? {
return self.bridgeToSwift.mainContext.fetchExisting(object)
return self.bridgeToSwift.mainContext.fetchExisting(object) as NSManagedObject?
}
/**
@@ -52,7 +52,7 @@ public extension CSDataStack {
@objc
public func fetchExistingObjectWithID(_ objectID: NSManagedObjectID) -> Any? {
return self.bridgeToSwift.mainContext.fetchExisting(objectID)
return self.bridgeToSwift.mainContext.fetchExisting(objectID) as NSManagedObject?
}
/**
@@ -64,7 +64,7 @@ public extension CSDataStack {
@objc
public func fetchExistingObjects(_ objects: [NSManagedObject]) -> [Any] {
return self.bridgeToSwift.mainContext.fetchExisting(objects)
return self.bridgeToSwift.mainContext.fetchExisting(objects) as [NSManagedObject]
}
/**
@@ -76,7 +76,7 @@ public extension CSDataStack {
@objc
public func fetchExistingObjectsWithIDs(_ objectIDs: [NSManagedObjectID]) -> [Any] {
return self.bridgeToSwift.mainContext.fetchExisting(objectIDs)
return self.bridgeToSwift.mainContext.fetchExisting(objectIDs) as [NSManagedObject]
}
/**

View File

@@ -27,8 +27,6 @@ import Foundation
import CoreData
#if os(iOS) || os(watchOS) || os(tvOS)
// MARK: - CSListMonitor
/**
@@ -36,8 +34,9 @@ import CoreData
- SeeAlso: `ListMonitor`
*/
@available(OSX 10.12, *)
@objc
public final class CSListMonitor: NSObject, CoreStoreObjectiveCType {
public final class CSListMonitor: NSObject {
// MARK: Public (Accessors)
@@ -546,7 +545,8 @@ public final class CSListMonitor: NSObject, CoreStoreObjectiveCType {
// MARK: - ListMonitor
extension ListMonitor: CoreStoreSwiftType {
@available(OSX 10.12, *)
extension ListMonitor where T: NSManagedObject {
// MARK: CoreStoreSwiftType
@@ -554,6 +554,17 @@ extension ListMonitor: CoreStoreSwiftType {
return CSListMonitor(self)
}
// MARK: FilePrivate
fileprivate func downcast() -> ListMonitor<NSManagedObject> {
@inline(__always)
func noWarnUnsafeBitCast<T, U>(_ x: T, to type: U.Type) -> U {
return unsafeBitCast(x, to: type)
}
return noWarnUnsafeBitCast(self, to: ListMonitor<NSManagedObject>.self)
}
}
#endif

View File

@@ -27,8 +27,6 @@ import Foundation
import CoreData
#if os(iOS) || os(watchOS) || os(tvOS)
// MARK: - CSListObserver
/**
@@ -42,6 +40,7 @@ import CoreData
- SeeAlso: `ListObserver`
*/
@available(OSX 10.12, *)
@objc
public protocol CSListObserver: class, AnyObject {
@@ -92,6 +91,7 @@ public protocol CSListObserver: class, AnyObject {
- SeeAlso: `ListObjectObserver`
*/
@available(OSX 10.12, *)
@objc
public protocol CSListObjectObserver: CSListObserver {
@@ -152,6 +152,7 @@ public protocol CSListObjectObserver: CSListObserver {
- SeeAlso: `ListSectionObserver`
*/
@available(OSX 10.12, *)
@objc
public protocol CSListSectionObserver: CSListObjectObserver {
@@ -175,5 +176,3 @@ public protocol CSListSectionObserver: CSListObjectObserver {
@objc
optional func listMonitor(_ monitor: CSListMonitor, didDeleteSection sectionInfo: NSFetchedResultsSectionInfo, fromSectionIndex sectionIndex: Int)
}
#endif

View File

@@ -27,8 +27,6 @@ import Foundation
import CoreData
#if os(iOS) || os(watchOS) || os(tvOS)
// MARK: - CSObjectMonitor
/**
@@ -36,8 +34,9 @@ import CoreData
- SeeAlso: `ObjectMonitor`
*/
@available(OSX 10.12, *)
@objc
public final class CSObjectMonitor: NSObject, CoreStoreObjectiveCType {
public final class CSObjectMonitor: NSObject {
/**
Returns the `NSManagedObject` instance being observed, or `nil` if the object was already deleted.
@@ -138,7 +137,8 @@ public final class CSObjectMonitor: NSObject, CoreStoreObjectiveCType {
// MARK: - ObjectMonitor
extension ObjectMonitor: CoreStoreSwiftType {
@available(OSX 10.12, *)
extension ObjectMonitor where EntityType: NSManagedObject {
// MARK: CoreStoreSwiftType
@@ -146,6 +146,17 @@ extension ObjectMonitor: CoreStoreSwiftType {
return CSObjectMonitor(self)
}
// MARK: FilePrivate
fileprivate func downcast() -> ObjectMonitor<NSManagedObject> {
@inline(__always)
func noWarnUnsafeBitCast<T, U>(_ x: T, to type: U.Type) -> U {
return unsafeBitCast(x, to: type)
}
return noWarnUnsafeBitCast(self, to: ObjectMonitor<NSManagedObject>.self)
}
}
#endif

View File

@@ -27,8 +27,6 @@ import Foundation
import CoreData
#if os(iOS) || os(watchOS) || os(tvOS)
// MARK: - CSObjectObserver
/**
@@ -40,6 +38,7 @@ import CoreData
- SeeAlso: `ObjectObserver`
*/
@available(OSX 10.12, *)
@objc
public protocol CSObjectObserver: class, AnyObject {
@@ -71,5 +70,3 @@ public protocol CSObjectObserver: class, AnyObject {
@objc
optional func objectMonitor(_ monitor: CSObjectMonitor, didDeleteObject object: Any)
}
#endif

View File

@@ -27,8 +27,6 @@ import Foundation
import CoreData
#if os(iOS) || os(watchOS) || os(tvOS)
// MARK: - CSSectionBy
/**
@@ -36,6 +34,7 @@ import CoreData
- SeeAlso: `SectionBy`
*/
@available(OSX 10.12, *)
@objc
public final class CSSectionBy: NSObject, CoreStoreObjectiveCType {
@@ -87,6 +86,7 @@ public final class CSSectionBy: NSObject, CoreStoreObjectiveCType {
// MARK: - SectionBy
@available(OSX 10.12, *)
extension SectionBy: CoreStoreSwiftType {
// MARK: CoreStoreSwiftType
@@ -96,5 +96,3 @@ extension SectionBy: CoreStoreSwiftType {
return CSSectionBy(self)
}
}
#endif

View File

@@ -27,10 +27,9 @@ import Foundation
import CoreData
#if os(iOS) || os(watchOS) || os(tvOS)
// MARK: - CSDataStack
@available(OSX 10.12, *)
public extension CSDataStack {
/**
@@ -57,6 +56,7 @@ public extension CSDataStack {
// MARK: - CSUnsafeDataTransaction
@available(OSX 10.12, *)
public extension CSUnsafeDataTransaction {
/**
@@ -83,6 +83,7 @@ public extension CSUnsafeDataTransaction {
// MARK: - Private
@available(OSX 10.12, *)
fileprivate func createFRC(fromContext context: NSManagedObjectContext, from: CSFrom? = nil, sectionBy: CSSectionBy?, fetchClauses: [CSFetchClause]) -> NSFetchedResultsController<NSManagedObject> {
let controller = CoreStoreFetchedResultsController(
@@ -102,5 +103,3 @@ fileprivate func createFRC(fromContext context: NSManagedObjectContext, from: CS
)
return controller.dynamicCast()
}
#endif

View File

@@ -38,9 +38,9 @@ public extension NSManagedObject {
- returns: the primitive value for the KVC key
*/
@objc
public func cs_accessValueForKVCKey(_ KVCKey: KeyPath) -> Any? {
public func cs_accessValueForKVCKey(_ kvcKey: KeyPath) -> Any? {
return self.accessValueForKVCKey(KVCKey)
return self.getValue(forKvcKey: kvcKey)
}
/**
@@ -52,7 +52,7 @@ public extension NSManagedObject {
@objc
public func cs_setValue(_ value: Any?, forKVCKey KVCKey: KeyPath) {
self.setValue(value, forKVCKey: KVCKey)
self.setValue(value, forKvcKey: KVCKey)
}
/**