fix bug when using ObjectMonitor with CoreStoreObjects

This commit is contained in:
John Estropia
2017-06-06 17:40:29 +09:00
parent 0304067beb
commit f9b6dd0c6a
4 changed files with 9 additions and 24 deletions

View File

@@ -35,7 +35,7 @@ internal final class CoreStoreFetchedResultsController: NSFetchedResultsControll
// MARK: Internal // MARK: Internal
@nonobjc @nonobjc
internal convenience init<T: DynamicObject>(dataStack: DataStack, fetchRequest: NSFetchRequest<NSManagedObject>, from: From<T>?, sectionBy: SectionBy? = nil, applyFetchClauses: @escaping (_ fetchRequest: NSFetchRequest<NSManagedObject>) -> Void) { internal convenience init<T: DynamicObject>(dataStack: DataStack, fetchRequest: NSFetchRequest<NSManagedObject>, from: From<T>, sectionBy: SectionBy? = nil, applyFetchClauses: @escaping (_ fetchRequest: NSFetchRequest<NSManagedObject>) -> Void) {
self.init( self.init(
context: dataStack.mainContext, context: dataStack.mainContext,
@@ -47,33 +47,18 @@ internal final class CoreStoreFetchedResultsController: NSFetchedResultsControll
} }
@nonobjc @nonobjc
internal init<T: DynamicObject>(context: NSManagedObjectContext, fetchRequest: NSFetchRequest<NSManagedObject>, from: From<T>?, sectionBy: SectionBy? = nil, applyFetchClauses: @escaping (_ fetchRequest: NSFetchRequest<NSManagedObject>) -> Void) { internal init<T: DynamicObject>(context: NSManagedObjectContext, fetchRequest: NSFetchRequest<NSManagedObject>, from: From<T>, sectionBy: SectionBy? = nil, applyFetchClauses: @escaping (_ fetchRequest: NSFetchRequest<NSManagedObject>) -> Void) {
_ = from?.applyToFetchRequest( _ = from.applyToFetchRequest(
fetchRequest, fetchRequest,
context: context, context: context,
applyAffectedStores: false applyAffectedStores: false
) )
applyFetchClauses(fetchRequest) applyFetchClauses(fetchRequest)
if let from = from { self.reapplyAffectedStores = { fetchRequest, context in
self.reapplyAffectedStores = { fetchRequest, context in return from.applyAffectedStoresForFetchedRequest(fetchRequest, context: context)
return from.applyAffectedStoresForFetchedRequest(fetchRequest, context: context)
}
}
else {
guard let from = (fetchRequest.entity.flatMap { $0.managedObjectClassName }).flatMap(NSClassFromString).flatMap({ From<T>($0 as! T.Type) }) else {
CoreStore.abort("Attempted to create a \(CoreStoreFetchedResultsController.self) without a \(cs_typeName(From<T>.self)) clause or an \(cs_typeName(NSEntityDescription.self)).")
}
self.reapplyAffectedStores = { fetchRequest, context in
return from.applyAffectedStoresForFetchedRequest(fetchRequest, context: context)
}
} }
super.init( super.init(

View File

@@ -201,7 +201,7 @@ public extension UnsafeDataTransaction {
// MARK: - Private // MARK: - Private
@available(OSX 10.12, *) @available(OSX 10.12, *)
fileprivate func createFRC<T: NSManagedObject>(fromContext context: NSManagedObjectContext, from: From<T>? = nil, sectionBy: SectionBy? = nil, fetchClauses: [FetchClause]) -> NSFetchedResultsController<T> { fileprivate func createFRC<T: NSManagedObject>(fromContext context: NSManagedObjectContext, from: From<T>, sectionBy: SectionBy? = nil, fetchClauses: [FetchClause]) -> NSFetchedResultsController<T> {
let controller = CoreStoreFetchedResultsController( let controller = CoreStoreFetchedResultsController(
context: context, context: context,

View File

@@ -68,12 +68,12 @@ public extension CSUnsafeDataTransaction {
// MARK: - Private // MARK: - Private
@available(OSX 10.12, *) @available(OSX 10.12, *)
fileprivate func createFRC(fromContext context: NSManagedObjectContext, from: CSFrom? = nil, sectionBy: CSSectionBy?, fetchClauses: [CSFetchClause]) -> NSFetchedResultsController<NSManagedObject> { fileprivate func createFRC(fromContext context: NSManagedObjectContext, from: CSFrom, sectionBy: CSSectionBy?, fetchClauses: [CSFetchClause]) -> NSFetchedResultsController<NSManagedObject> {
let controller = CoreStoreFetchedResultsController( let controller = CoreStoreFetchedResultsController(
context: context, context: context,
fetchRequest: CoreStoreFetchRequest().dynamicCast(), fetchRequest: CoreStoreFetchRequest().dynamicCast(),
from: from?.bridgeToSwift, from: from.bridgeToSwift,
sectionBy: sectionBy?.bridgeToSwift, sectionBy: sectionBy?.bridgeToSwift,
applyFetchClauses: { (fetchRequest) in applyFetchClauses: { (fetchRequest) in

View File

@@ -272,7 +272,7 @@ public final class ObjectMonitor<D: DynamicObject>: Equatable {
let fetchedResultsController = CoreStoreFetchedResultsController( let fetchedResultsController = CoreStoreFetchedResultsController(
context: context, context: context,
fetchRequest: fetchRequest.dynamicCast(), fetchRequest: fetchRequest.dynamicCast(),
from: nil as From<ObjectType>?, from: From<ObjectType>([objectID.persistentStore?.configurationName]),
applyFetchClauses: Where("SELF", isEqualTo: objectID).applyToFetchRequest applyFetchClauses: Where("SELF", isEqualTo: objectID).applyToFetchRequest
) )