From a9c0feae46b0419b192c0b7621096b3ddcd3a90f Mon Sep 17 00:00:00 2001 From: John Estropia Date: Tue, 27 Sep 2016 19:02:24 +0900 Subject: [PATCH] NSFetchRequest.affectedStores bug workaround --- CoreStore.xcodeproj/project.pbxproj | 32 +++++++++++++------ CoreStoreTests/StorageInterfaceTests.swift | 16 +++++----- .../CoreStoreFetchRequest+CoreStore.swift | 24 ++------------ .../NSManagedObjectContext+Querying.swift | 16 +++++----- .../NSManagedObjectContext+ObjectiveC.swift | 16 +++++----- Sources/Observing/ListMonitor.swift | 6 ++-- Sources/Observing/ObjectMonitor.swift | 2 +- 7 files changed, 52 insertions(+), 60 deletions(-) diff --git a/CoreStore.xcodeproj/project.pbxproj b/CoreStore.xcodeproj/project.pbxproj index 7dfa396..0950f7f 100644 --- a/CoreStore.xcodeproj/project.pbxproj +++ b/CoreStore.xcodeproj/project.pbxproj @@ -139,10 +139,10 @@ B52557881D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; }; B52557891D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; }; B525578A1D02DE8100E51965 /* FetchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B52557871D02DE8100E51965 /* FetchTests.swift */; }; - B52661401CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; - B52661421CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; - B52661431CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; - B52661441CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */; }; + B52661401CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */; }; + B52661421CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */; }; + B52661431CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */; }; + B52661441CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */; }; B529C2041CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; B529C2061CA4A2DB007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; B529C2071CA4A2DC007E7EBD /* CSSaveResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */; }; @@ -599,7 +599,7 @@ B525577F1D029D2500E51965 /* TweakTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TweakTests.swift; sourceTree = ""; }; B52557831D02A07400E51965 /* SectionByTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SectionByTests.swift; sourceTree = ""; }; B52557871D02DE8100E51965 /* FetchTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchTests.swift; sourceTree = ""; }; - B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreStoreFetchRequest.swift; sourceTree = ""; }; + B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CoreStoreFetchRequest+CoreStore.swift"; sourceTree = ""; }; B529C2031CA4A2DB007E7EBD /* CSSaveResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CSSaveResult.swift; sourceTree = ""; }; B52DD1741BE1F8CC00949AFE /* CoreStore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CoreStore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B52DD17D1BE1F8CC00949AFE /* CoreStoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreStoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1181,7 +1181,7 @@ isa = PBXGroup; children = ( B5C976E61C6E3A5900B1AF90 /* CoreStoreFetchedResultsController.swift */, - B526613F1CADD585007B85D9 /* CoreStoreFetchRequest.swift */, + B526613F1CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift */, B54A6A541BA15F2A007870FD /* FetchedResultsControllerDelegate.swift */, B5E834BA1B7691F3001D3D50 /* Functions.swift */, B5FAD6AB1B51285300714891 /* MigrationManager.swift */, @@ -1421,9 +1421,11 @@ }; 82BA18881C4BBCBA00A0916E = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; 82BA18911C4BBCBA00A0916E = { CreatedOnToolsVersion = 7.2; + LastSwiftMigration = 0800; }; B52DD1731BE1F8CC00949AFE = { CreatedOnToolsVersion = 7.1; @@ -1563,7 +1565,7 @@ B53FB9FE1CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */, B5DBE2D21C991B3E00B5CEFA /* CSDataStack.swift in Sources */, B50392F91C478FF3009900CA /* NSManagedObject+Transaction.swift in Sources */, - B52661401CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */, + B52661401CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */, B53FBA181CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */, B5202CFA1C04688100DED140 /* NSFetchedResultsController+Convenience.swift in Sources */, B5519A591CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */, @@ -1714,7 +1716,7 @@ 82BA18B41C4BBD3900A0916E /* BaseDataTransaction+Importing.swift in Sources */, B53FBA1A1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */, 82BA18CA1C4BBD5900A0916E /* MigrationResult.swift in Sources */, - B52661421CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */, + B52661421CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */, B5519A5A1CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */, B5ECDBE11CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */, 82BA18C11C4BBD5300A0916E /* CoreStore+Observing.swift in Sources */, @@ -1864,7 +1866,7 @@ B52DD1C71BE1F94600949AFE /* NSManagedObjectContext+Querying.swift in Sources */, B52DD1C81BE1F94600949AFE /* NSManagedObjectContext+Setup.swift in Sources */, B52DD1C31BE1F94600949AFE /* NotificationObserver.swift in Sources */, - B52661441CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */, + B52661441CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */, B52DD1A81BE1F93200949AFE /* DataStack+Querying.swift in Sources */, B5220E221D130818009BC71E /* CSSectionBy.swift in Sources */, B52DD1BC1BE1F94000949AFE /* MigrationResult.swift in Sources */, @@ -2009,7 +2011,7 @@ B53FBA011CAB2D2F00F0D40A /* CSMigrationResult.swift in Sources */, B5DBE2D41C991B3E00B5CEFA /* CSDataStack.swift in Sources */, B50392FA1C47963F009900CA /* NSManagedObject+Transaction.swift in Sources */, - B52661431CADD585007B85D9 /* CoreStoreFetchRequest.swift in Sources */, + B52661431CADD585007B85D9 /* CoreStoreFetchRequest+CoreStore.swift in Sources */, B53FBA1B1CAB63E200F0D40A /* NSManagedObject+ObjectiveC.swift in Sources */, B5519A5B1CA2008C002BEF78 /* CSBaseDataTransaction.swift in Sources */, B5ECDBE21CA6BB2B00C7F112 /* CSBaseDataTransaction+Querying.swift in Sources */, @@ -2251,6 +2253,7 @@ 2F03A54719C5C6DA005002A5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = NO; CLANG_ENABLE_MODULES = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -2270,6 +2273,7 @@ 2F03A54819C5C6DA005002A5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = NO; CLANG_ENABLE_MODULES = YES; INFOPLIST_FILE = CoreStoreTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; @@ -2297,6 +2301,7 @@ SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; }; name = Debug; @@ -2316,6 +2321,7 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; SDKROOT = appletvos; SKIP_INSTALL = YES; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; }; name = Release; @@ -2323,6 +2329,7 @@ 82BA189C1C4BBCBA00A0916E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = NO; CLANG_ENABLE_MODULES = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = CoreStoreTests/Info.plist; @@ -2332,6 +2339,7 @@ SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; }; name = Debug; @@ -2339,6 +2347,7 @@ 82BA189D1C4BBCBA00A0916E /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = NO; CLANG_ENABLE_MODULES = YES; COPY_PHASE_STRIP = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -2348,6 +2357,7 @@ PRODUCT_NAME = CoreStoreTests; SDKROOT = appletvos; SWIFT_OBJC_BRIDGING_HEADER = "CoreStoreTests/CoreStoreTests-Bridging-Header.h"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; }; name = Release; @@ -2401,6 +2411,7 @@ B52DD1871BE1F8CD00949AFE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = NO; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; @@ -2420,6 +2431,7 @@ B52DD1881BE1F8CD00949AFE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = NO; CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; diff --git a/CoreStoreTests/StorageInterfaceTests.swift b/CoreStoreTests/StorageInterfaceTests.swift index 9a1206d..9c85fd6 100644 --- a/CoreStoreTests/StorageInterfaceTests.swift +++ b/CoreStoreTests/StorageInterfaceTests.swift @@ -94,9 +94,9 @@ final class StorageInterfaceTests: XCTestCase { dynamic func test_ThatFileURLSQLiteStores_ConfigureCorrectly() { let fileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()) - .URLByAppendingPathComponent(NSUUID().UUIDString, isDirectory: false)! - .URLByAppendingPathExtension("db")! - let bundles = [NSBundle(forClass: self.dynamicType)] + .appendingPathComponent(NSUUID().uuidString, isDirectory: false)! + .appendingPathExtension("db") + let bundles = [Bundle(for: type(of: self))] let store = SQLiteStore( fileURL: fileURL, @@ -149,8 +149,8 @@ final class StorageInterfaceTests: XCTestCase { in: .userDomainMask).first! let legacyDefaultFileURL = legacyDefaultRootDirectory - .URLByAppendingPathComponent(DataStack.applicationName, isDirectory: false)! - .URLByAppendingPathExtension("sqlite")! + .appendingPathComponent(DataStack.applicationName, isDirectory: false) + .appendingPathExtension("sqlite") XCTAssertEqual(LegacySQLiteStore.defaultRootDirectory, legacyDefaultRootDirectory) XCTAssertEqual(LegacySQLiteStore.defaultFileURL, legacyDefaultFileURL) @@ -173,9 +173,9 @@ final class StorageInterfaceTests: XCTestCase { dynamic func test_ThatFileURLLegacySQLiteStores_ConfigureCorrectly() { let fileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()) - .URLByAppendingPathComponent(NSUUID().UUIDString, isDirectory: false)! - .URLByAppendingPathExtension("db")! - let bundles = [NSBundle(forClass: self.dynamicType)] + .appendingPathComponent(NSUUID().uuidString, isDirectory: false)! + .appendingPathExtension("db") + let bundles = [Bundle(for: type(of: self))] let store = LegacySQLiteStore( fileURL: fileURL, diff --git a/Sources/Internal/CoreStoreFetchRequest+CoreStore.swift b/Sources/Internal/CoreStoreFetchRequest+CoreStore.swift index 1c8bc4c..b5f26fa 100644 --- a/Sources/Internal/CoreStoreFetchRequest+CoreStore.swift +++ b/Sources/Internal/CoreStoreFetchRequest+CoreStore.swift @@ -1,5 +1,5 @@ // -// CoreStoreFetchRequest.swift +// CoreStoreFetchRequest+CoreStore.swift // CoreStore // // Copyright © 2016 John Rommel Estropia @@ -29,9 +29,7 @@ import CoreData // MARK: - CoreStoreFetchRequest -// Bugfix for NSFetchRequest messing up memory management for `affectedStores` -// http://stackoverflow.com/questions/14396375/nsfetchedresultscontroller-crashes-in-ios-6-if-affectedstores-is-specified -internal final class CoreStoreFetchRequest: NSFetchRequest { +internal extension CoreStoreFetchRequest { // MARK: Internal @@ -40,22 +38,4 @@ internal final class CoreStoreFetchRequest: NSFetchRequ return unsafeBitCast(self, to: NSFetchRequest.self) } - - - // MARK: NSFetchRequest - - @objc - dynamic override var affectedStores: [NSPersistentStore]? { - - get { - - // This forced-casting is needed to fix an ARC bug with "affectedStores" mis-retaining the array - let affectedStores: NSArray? = super.affectedStores.flatMap({ NSArray(array: $0) } ) - return affectedStores as? [NSPersistentStore] - } - set { - - super.affectedStores = newValue - } - } } diff --git a/Sources/Internal/NSManagedObjectContext+Querying.swift b/Sources/Internal/NSManagedObjectContext+Querying.swift index 19e6be4..eaa4cb0 100644 --- a/Sources/Internal/NSManagedObjectContext+Querying.swift +++ b/Sources/Internal/NSManagedObjectContext+Querying.swift @@ -81,7 +81,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func fetchOne(_ from: From, _ fetchClauses: [FetchClause]) -> T? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 1 @@ -134,7 +134,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func fetchAll(_ from: From, _ fetchClauses: [FetchClause]) -> [T]? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 0 @@ -187,7 +187,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func fetchCount(_ from: From, _ fetchClauses: [FetchClause]) -> Int? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.applyToFetchRequest(fetchRequest, context: self) fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) } @@ -237,7 +237,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func fetchObjectID(_ from: From, _ fetchClauses: [FetchClause]) -> NSManagedObjectID? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 1 @@ -290,7 +290,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func fetchObjectIDs(_ from: From, _ fetchClauses: [FetchClause]) -> [NSManagedObjectID]? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 0 @@ -343,7 +343,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func deleteAll(_ from: From, _ deleteClauses: [DeleteClause]) -> Int? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 0 @@ -406,7 +406,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func queryValue(_ from: From, _ selectClause: Select, _ queryClauses: [QueryClause]) -> U? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 0 @@ -500,7 +500,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func queryAttributes(_ from: From, _ selectClause: Select, _ queryClauses: [QueryClause]) -> [[String: Any]]? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 0 diff --git a/Sources/ObjectiveC/NSManagedObjectContext+ObjectiveC.swift b/Sources/ObjectiveC/NSManagedObjectContext+ObjectiveC.swift index fb7c515..91bd888 100644 --- a/Sources/ObjectiveC/NSManagedObjectContext+ObjectiveC.swift +++ b/Sources/ObjectiveC/NSManagedObjectContext+ObjectiveC.swift @@ -36,7 +36,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func fetchOne(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) -> NSManagedObject? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 1 @@ -53,7 +53,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func fetchAll(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) -> [T]? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 0 @@ -70,7 +70,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func fetchCount(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) -> Int? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self) fetchClauses.forEach { $0.applyToFetchRequest(fetchRequest) } @@ -84,7 +84,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func fetchObjectID(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) -> NSManagedObjectID? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 1 @@ -101,7 +101,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func fetchObjectIDs(_ from: CSFrom, _ fetchClauses: [CSFetchClause]) -> [NSManagedObjectID]? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 0 @@ -118,7 +118,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func deleteAll(_ from: CSFrom, _ deleteClauses: [CSDeleteClause]) -> Int? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 0 @@ -137,7 +137,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func queryValue(_ from: CSFrom, _ selectClause: CSSelect, _ queryClauses: [CSQueryClause]) -> Any? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 0 @@ -156,7 +156,7 @@ internal extension NSManagedObjectContext { @nonobjc internal func queryAttributes(_ from: CSFrom, _ selectClause: CSSelect, _ queryClauses: [CSQueryClause]) -> [[String: Any]]? { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() let storeFound = from.bridgeToSwift.applyToFetchRequest(fetchRequest, context: self) fetchRequest.fetchLimit = 0 diff --git a/Sources/Observing/ListMonitor.swift b/Sources/Observing/ListMonitor.swift index 415a01c..9a17dce 100644 --- a/Sources/Observing/ListMonitor.swift +++ b/Sources/Observing/ListMonitor.swift @@ -1015,7 +1015,7 @@ public final class ListMonitor: Hashable { private init(context: NSManagedObjectContext, transactionQueue: DispatchQueue, from: From, sectionBy: SectionBy?, applyFetchClauses: @escaping (_ fetchRequest: NSFetchRequest) -> Void, createAsynchronously: ((ListMonitor) -> Void)?) { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() fetchRequest.fetchLimit = 0 fetchRequest.resultType = .managedObjectResultType fetchRequest.fetchBatchSize = 20 @@ -1068,7 +1068,7 @@ public final class ListMonitor: Hashable { self.isPersistentStoreChanging = true guard let removedStores = (note.userInfo?[NSRemovedPersistentStoresKey] as? [NSPersistentStore]).flatMap(Set.init), - !Set((self.fetchedResultsController.fetchRequest as! CoreStoreFetchRequest).affectedStores ?? []).intersection(removedStores).isEmpty else { + !Set((self.fetchedResultsController.fetchRequest as Any as! CoreStoreFetchRequest).safeAffectedStores ?? []).intersection(removedStores).isEmpty else { return } @@ -1089,7 +1089,7 @@ public final class ListMonitor: Hashable { if !self.isPendingRefetch { - let previousStores = Set((self.fetchedResultsController.fetchRequest as! CoreStoreFetchRequest).safeAffectedStores ?? []) + let previousStores = Set((self.fetchedResultsController.fetchRequest as Any as! CoreStoreFetchRequest).safeAffectedStores ?? []) let currentStores = previousStores .subtracting(note.userInfo?[NSRemovedPersistentStoresKey] as? [NSPersistentStore] ?? []) .union(note.userInfo?[NSAddedPersistentStoresKey] as? [NSPersistentStore] ?? []) diff --git a/Sources/Observing/ObjectMonitor.swift b/Sources/Observing/ObjectMonitor.swift index f416013..0feb59a 100644 --- a/Sources/Observing/ObjectMonitor.swift +++ b/Sources/Observing/ObjectMonitor.swift @@ -220,7 +220,7 @@ public final class ObjectMonitor { private init(context: NSManagedObjectContext, object: EntityType) { - let fetchRequest = CoreStoreFetchRequest() + let fetchRequest = CoreStoreFetchRequest() fetchRequest.entity = object.entity fetchRequest.fetchLimit = 0 fetchRequest.resultType = .managedObjectResultType