From 81c5b0c650a84d3b8a6fbfe7d89a36f09c2b161b Mon Sep 17 00:00:00 2001 From: John Estropia Date: Tue, 8 Nov 2016 10:04:49 +0900 Subject: [PATCH] fix iOS 10 NSFetchedResultsController bug for iOS 7-supporting branch --- CoreStore.podspec | 2 +- Sources/Info.plist | 2 +- .../Internal/FetchedResultsControllerDelegate.swift | 12 +++++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CoreStore.podspec b/CoreStore.podspec index 38d7970..edb2eee 100644 --- a/CoreStore.podspec +++ b/CoreStore.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "CoreStore" - s.version = "2.0.6" + s.version = "2.0.7" s.license = "MIT" s.summary = "Unleashing the real power of Core Data with the elegance and safety of Swift" s.homepage = "https://github.com/JohnEstropia/CoreStore" diff --git a/Sources/Info.plist b/Sources/Info.plist index 0100960..9fa96d1 100644 --- a/Sources/Info.plist +++ b/Sources/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.0.6 + 2.0.7 CFBundleSignature ???? CFBundleVersion diff --git a/Sources/Internal/FetchedResultsControllerDelegate.swift b/Sources/Internal/FetchedResultsControllerDelegate.swift index fe35a11..f41777b 100644 --- a/Sources/Internal/FetchedResultsControllerDelegate.swift +++ b/Sources/Internal/FetchedResultsControllerDelegate.swift @@ -108,7 +108,7 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult return } - guard let actualType = NSFetchedResultsChangeType(rawValue: type.rawValue) else { + guard var actualType = NSFetchedResultsChangeType(rawValue: type.rawValue) else { // This fix is for a bug where iOS passes 0 for NSFetchedResultsChangeType, but this is not a valid enum case. // Swift will then always execute the first case of the switch causing strange behaviour. @@ -121,6 +121,16 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult // https://forums.developer.apple.com/message/9998#9998 // https://forums.developer.apple.com/message/31849#31849 + if #available(iOS 10.0, tvOS 10.0, watchOS 3.0, *) { + + // I don't know if iOS 10 even attempted to fix this mess... + if case .Update = actualType + where indexPath != nil && newIndexPath != nil { + + actualType = .Move + } + } + switch actualType { case .Update: