mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-04-24 01:28:37 +02:00
tidy up
This commit is contained in:
@@ -406,11 +406,11 @@ extension Int8: SelectValueResultType {
|
|||||||
|
|
||||||
public static func fromResultObject(result: AnyObject) -> Int8? {
|
public static func fromResultObject(result: AnyObject) -> Int8? {
|
||||||
|
|
||||||
if let value = (result as? NSNumber)?.longLongValue {
|
guard let value = (result as? NSNumber)?.longLongValue else {
|
||||||
|
|
||||||
return numericCast(value) as Int8
|
return nil
|
||||||
}
|
}
|
||||||
return nil
|
return numericCast(value) as Int8
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -426,11 +426,11 @@ extension Int16: SelectValueResultType {
|
|||||||
|
|
||||||
public static func fromResultObject(result: AnyObject) -> Int16? {
|
public static func fromResultObject(result: AnyObject) -> Int16? {
|
||||||
|
|
||||||
if let value = (result as? NSNumber)?.longLongValue {
|
guard let value = (result as? NSNumber)?.longLongValue else {
|
||||||
|
|
||||||
return numericCast(value) as Int16
|
return nil
|
||||||
}
|
}
|
||||||
return nil
|
return numericCast(value) as Int16
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,11 +446,11 @@ extension Int32: SelectValueResultType {
|
|||||||
|
|
||||||
public static func fromResultObject(result: AnyObject) -> Int32? {
|
public static func fromResultObject(result: AnyObject) -> Int32? {
|
||||||
|
|
||||||
if let value = (result as? NSNumber)?.longLongValue {
|
guard let value = (result as? NSNumber)?.longLongValue else {
|
||||||
|
|
||||||
return numericCast(value) as Int32
|
return nil
|
||||||
}
|
}
|
||||||
return nil
|
return numericCast(value) as Int32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -482,11 +482,11 @@ extension Int: SelectValueResultType {
|
|||||||
|
|
||||||
public static func fromResultObject(result: AnyObject) -> Int? {
|
public static func fromResultObject(result: AnyObject) -> Int? {
|
||||||
|
|
||||||
if let value = (result as? NSNumber)?.longLongValue {
|
guard let value = (result as? NSNumber)?.longLongValue else {
|
||||||
|
|
||||||
return numericCast(value) as Int
|
return nil
|
||||||
}
|
}
|
||||||
return nil
|
return numericCast(value) as Int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,11 +37,12 @@ internal final class MigrationManager: NSMigrationManager, NSProgressReporting {
|
|||||||
|
|
||||||
super.didChangeValueForKey(key)
|
super.didChangeValueForKey(key)
|
||||||
|
|
||||||
if key == "migrationProgress" {
|
guard key == "migrationProgress" else {
|
||||||
|
|
||||||
let progress = self.progress
|
return
|
||||||
progress.completedUnitCount = Int64(Float(progress.totalUnitCount) * self.migrationProgress)
|
|
||||||
}
|
}
|
||||||
|
let progress = self.progress
|
||||||
|
progress.completedUnitCount = Int64(Float(progress.totalUnitCount) * self.migrationProgress)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,22 +17,10 @@ internal extension NSFileManager {
|
|||||||
|
|
||||||
internal func removeSQLiteStoreAtURL(fileURL: NSURL) {
|
internal func removeSQLiteStoreAtURL(fileURL: NSURL) {
|
||||||
|
|
||||||
do {
|
_ = try? self.removeItemAtURL(fileURL)
|
||||||
|
|
||||||
try self.removeItemAtURL(fileURL)
|
|
||||||
}
|
|
||||||
catch _ { }
|
|
||||||
|
|
||||||
do {
|
let filePath = fileURL.path!
|
||||||
|
_ = try? self.removeItemAtPath(filePath.stringByAppendingString("-shm"))
|
||||||
try self.removeItemAtPath(fileURL.path!.stringByAppendingString("-shm"))
|
_ = try? self.removeItemAtPath(filePath.stringByAppendingString("-wal"))
|
||||||
}
|
|
||||||
catch _ { }
|
|
||||||
|
|
||||||
do {
|
|
||||||
|
|
||||||
try self.removeItemAtPath(fileURL.path!.stringByAppendingString("-wal"))
|
|
||||||
}
|
|
||||||
catch _ { }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -61,14 +61,14 @@ internal extension NSManagedObjectContext {
|
|||||||
|
|
||||||
internal func entityDescriptionForEntityClass(entity: AnyClass) -> NSEntityDescription? {
|
internal func entityDescriptionForEntityClass(entity: AnyClass) -> NSEntityDescription? {
|
||||||
|
|
||||||
if let entityName = self.parentStack?.entityNameForEntityClass(entity) {
|
guard let entityName = self.parentStack?.entityNameForEntityClass(entity) else {
|
||||||
|
|
||||||
return NSEntityDescription.entityForName(
|
return nil
|
||||||
entityName,
|
|
||||||
inManagedObjectContext: self
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
return nil
|
return NSEntityDescription.entityForName(
|
||||||
|
entityName,
|
||||||
|
inManagedObjectContext: self
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal func setupForCoreStoreWithContextName(contextName: String) {
|
internal func setupForCoreStoreWithContextName(contextName: String) {
|
||||||
@@ -83,7 +83,7 @@ internal extension NSManagedObjectContext {
|
|||||||
let context = note.object as! NSManagedObjectContext
|
let context = note.object as! NSManagedObjectContext
|
||||||
let insertedObjects = context.insertedObjects
|
let insertedObjects = context.insertedObjects
|
||||||
let numberOfInsertedObjects = insertedObjects.count
|
let numberOfInsertedObjects = insertedObjects.count
|
||||||
if numberOfInsertedObjects <= 0 {
|
guard numberOfInsertedObjects > 0 else {
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -91,7 +91,6 @@ internal extension NSManagedObjectContext {
|
|||||||
do {
|
do {
|
||||||
|
|
||||||
try context.obtainPermanentIDsForObjects(Array(insertedObjects))
|
try context.obtainPermanentIDsForObjects(Array(insertedObjects))
|
||||||
return
|
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
|
|
||||||
|
|||||||
@@ -37,24 +37,17 @@ internal extension NSManagedObjectContext {
|
|||||||
|
|
||||||
if object.objectID.temporaryID {
|
if object.objectID.temporaryID {
|
||||||
|
|
||||||
var objectIDError: NSError?
|
do {
|
||||||
let didSucceed = withExtendedLifetime(self) { (context: NSManagedObjectContext) -> Bool in
|
|
||||||
|
|
||||||
do {
|
try withExtendedLifetime(self) { (context: NSManagedObjectContext) -> Void in
|
||||||
|
|
||||||
try context.obtainPermanentIDsForObjects([object])
|
try context.obtainPermanentIDsForObjects([object])
|
||||||
return true
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
|
|
||||||
objectIDError = error as NSError
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if didSucceed != true {
|
catch {
|
||||||
|
|
||||||
CoreStore.handleError(
|
CoreStore.handleError(
|
||||||
objectIDError ?? NSError(coreStoreErrorCode: .UnknownError),
|
error as NSError,
|
||||||
"Failed to obtain permanent ID for object."
|
"Failed to obtain permanent ID for object."
|
||||||
)
|
)
|
||||||
return nil
|
return nil
|
||||||
@@ -75,7 +68,6 @@ internal extension NSManagedObjectContext {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal func fetchOne<T: NSManagedObject>(from: From<T>, _ fetchClauses: FetchClause...) -> T? {
|
internal func fetchOne<T: NSManagedObject>(from: From<T>, _ fetchClauses: FetchClause...) -> T? {
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ internal extension NSManagedObjectContext {
|
|||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
|
|
||||||
if self.parentContext != nil {
|
guard self.parentContext == nil else {
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ internal extension NSManagedObjectContext {
|
|||||||
|
|
||||||
self.performBlockAndWait { [unowned self] () -> Void in
|
self.performBlockAndWait { [unowned self] () -> Void in
|
||||||
|
|
||||||
if !self.hasChanges {
|
guard self.hasChanges else {
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -115,7 +115,7 @@ internal extension NSManagedObjectContext {
|
|||||||
|
|
||||||
self.performBlock { () -> Void in
|
self.performBlock { () -> Void in
|
||||||
|
|
||||||
if !self.hasChanges {
|
guard self.hasChanges else {
|
||||||
|
|
||||||
if let completion = completion {
|
if let completion = completion {
|
||||||
|
|
||||||
|
|||||||
@@ -192,14 +192,15 @@ internal extension NSManagedObjectModel {
|
|||||||
|
|
||||||
@nonobjc internal subscript(metadata: [String: AnyObject]) -> NSManagedObjectModel? {
|
@nonobjc internal subscript(metadata: [String: AnyObject]) -> NSManagedObjectModel? {
|
||||||
|
|
||||||
if let modelHashes = metadata[NSStoreModelVersionHashesKey] as? [String : NSData] {
|
guard let modelHashes = metadata[NSStoreModelVersionHashesKey] as? [String : NSData] else {
|
||||||
|
|
||||||
for modelVersion in self.modelVersions ?? [] {
|
return nil
|
||||||
|
}
|
||||||
|
for modelVersion in self.modelVersions ?? [] {
|
||||||
|
|
||||||
|
if let versionModel = self[modelVersion] where modelHashes == versionModel.entityVersionHashesByName {
|
||||||
|
|
||||||
if let versionModel = self[modelVersion] where modelHashes == versionModel.entityVersionHashesByName {
|
return versionModel
|
||||||
|
|
||||||
return versionModel
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -117,34 +117,30 @@ public extension DataStack {
|
|||||||
let coordinator = self.coordinator;
|
let coordinator = self.coordinator;
|
||||||
if let store = coordinator.persistentStoreForURL(fileURL) {
|
if let store = coordinator.persistentStoreForURL(fileURL) {
|
||||||
|
|
||||||
if store.type == NSSQLiteStoreType
|
guard store.type == NSSQLiteStoreType
|
||||||
&& store.configurationName == (configuration ?? Into.defaultConfigurationName) {
|
&& store.configurationName == (configuration ?? Into.defaultConfigurationName) else {
|
||||||
|
|
||||||
GCDQueue.Main.async {
|
let error = NSError(coreStoreErrorCode: .DifferentPersistentStoreExistsAtURL)
|
||||||
|
CoreStore.handleError(
|
||||||
completion(PersistentStoreResult(store))
|
error,
|
||||||
}
|
"Failed to add SQLite \(typeName(NSPersistentStore)) at \"\(fileURL)\" because a different \(typeName(NSPersistentStore)) at that URL already exists."
|
||||||
return nil
|
)
|
||||||
|
throw error
|
||||||
}
|
}
|
||||||
|
|
||||||
let error = NSError(coreStoreErrorCode: .DifferentPersistentStoreExistsAtURL)
|
GCDQueue.Main.async {
|
||||||
CoreStore.handleError(
|
|
||||||
error,
|
completion(PersistentStoreResult(store))
|
||||||
"Failed to add SQLite \(typeName(NSPersistentStore)) at \"\(fileURL)\" because a different \(typeName(NSPersistentStore)) at that URL already exists."
|
}
|
||||||
)
|
return nil
|
||||||
throw error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let fileManager = NSFileManager.defaultManager()
|
let fileManager = NSFileManager.defaultManager()
|
||||||
do {
|
_ = try? fileManager.createDirectoryAtURL(
|
||||||
|
fileURL.URLByDeletingLastPathComponent!,
|
||||||
try fileManager.createDirectoryAtURL(
|
withIntermediateDirectories: true,
|
||||||
fileURL.URLByDeletingLastPathComponent!,
|
attributes: nil
|
||||||
withIntermediateDirectories: true,
|
)
|
||||||
attributes: nil
|
|
||||||
)
|
|
||||||
}
|
|
||||||
catch _ { }
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
|
|||||||
@@ -166,12 +166,10 @@ public struct MigrationChain: NilLiteralConvertible, StringLiteralConvertible, D
|
|||||||
var valid = true
|
var valid = true
|
||||||
for version in elements {
|
for version in elements {
|
||||||
|
|
||||||
if let lastVersion = lastVersion {
|
if let lastVersion = lastVersion,
|
||||||
|
let _ = versionTree.updateValue(version, forKey: lastVersion) {
|
||||||
if let _ = versionTree.updateValue(version, forKey: lastVersion) {
|
|
||||||
|
|
||||||
valid = false
|
valid = false
|
||||||
}
|
|
||||||
}
|
}
|
||||||
lastVersion = version
|
lastVersion = version
|
||||||
}
|
}
|
||||||
@@ -203,11 +201,11 @@ public struct MigrationChain: NilLiteralConvertible, StringLiteralConvertible, D
|
|||||||
|
|
||||||
internal func nextVersionFrom(version: String) -> String? {
|
internal func nextVersionFrom(version: String) -> String? {
|
||||||
|
|
||||||
if let nextVersion = self.versionTree[version] where nextVersion != version {
|
guard let nextVersion = self.versionTree[version] where nextVersion != version else {
|
||||||
|
|
||||||
return nextVersion
|
return nil
|
||||||
}
|
}
|
||||||
return nil
|
return nextVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -321,10 +321,11 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor) -> Void in
|
callback: { [weak observer] (monitor) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitorWillChange(monitor)
|
return
|
||||||
}
|
}
|
||||||
|
observer.listMonitorWillChange(monitor)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerChangeNotification(
|
self.registerChangeNotification(
|
||||||
@@ -333,10 +334,11 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor) -> Void in
|
callback: { [weak observer] (monitor) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitorDidChange(monitor)
|
return
|
||||||
}
|
}
|
||||||
|
observer.listMonitorDidChange(monitor)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -367,10 +369,11 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor) -> Void in
|
callback: { [weak observer] (monitor) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitorWillChange(monitor)
|
return
|
||||||
}
|
}
|
||||||
|
observer.listMonitorWillChange(monitor)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerChangeNotification(
|
self.registerChangeNotification(
|
||||||
@@ -379,10 +382,11 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor) -> Void in
|
callback: { [weak observer] (monitor) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitorDidChange(monitor)
|
return
|
||||||
}
|
}
|
||||||
|
observer.listMonitorDidChange(monitor)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -392,14 +396,15 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitor(
|
return
|
||||||
monitor,
|
|
||||||
didInsertObject: object,
|
|
||||||
toIndexPath: newIndexPath!
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
observer.listMonitor(
|
||||||
|
monitor,
|
||||||
|
didInsertObject: object,
|
||||||
|
toIndexPath: newIndexPath!
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerObjectNotification(
|
self.registerObjectNotification(
|
||||||
@@ -408,14 +413,15 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitor(
|
return
|
||||||
monitor,
|
|
||||||
didDeleteObject: object,
|
|
||||||
fromIndexPath: indexPath!
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
observer.listMonitor(
|
||||||
|
monitor,
|
||||||
|
didDeleteObject: object,
|
||||||
|
fromIndexPath: indexPath!
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerObjectNotification(
|
self.registerObjectNotification(
|
||||||
@@ -424,14 +430,15 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitor(
|
return
|
||||||
monitor,
|
|
||||||
didUpdateObject: object,
|
|
||||||
atIndexPath: indexPath!
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
observer.listMonitor(
|
||||||
|
monitor,
|
||||||
|
didUpdateObject: object,
|
||||||
|
atIndexPath: indexPath!
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerObjectNotification(
|
self.registerObjectNotification(
|
||||||
@@ -440,15 +447,16 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitor(
|
return
|
||||||
monitor,
|
|
||||||
didMoveObject: object,
|
|
||||||
fromIndexPath: indexPath!,
|
|
||||||
toIndexPath: newIndexPath!
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
observer.listMonitor(
|
||||||
|
monitor,
|
||||||
|
didMoveObject: object,
|
||||||
|
fromIndexPath: indexPath!,
|
||||||
|
toIndexPath: newIndexPath!
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -479,10 +487,11 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor) -> Void in
|
callback: { [weak observer] (monitor) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitorWillChange(monitor)
|
return
|
||||||
}
|
}
|
||||||
|
observer.listMonitorWillChange(monitor)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerChangeNotification(
|
self.registerChangeNotification(
|
||||||
@@ -491,10 +500,11 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor) -> Void in
|
callback: { [weak observer] (monitor) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitorDidChange(monitor)
|
return
|
||||||
}
|
}
|
||||||
|
observer.listMonitorDidChange(monitor)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -504,14 +514,15 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitor(
|
return
|
||||||
monitor,
|
|
||||||
didInsertObject: object,
|
|
||||||
toIndexPath: newIndexPath!
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
observer.listMonitor(
|
||||||
|
monitor,
|
||||||
|
didInsertObject: object,
|
||||||
|
toIndexPath: newIndexPath!
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerObjectNotification(
|
self.registerObjectNotification(
|
||||||
@@ -520,14 +531,15 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitor(
|
return
|
||||||
monitor,
|
|
||||||
didDeleteObject: object,
|
|
||||||
fromIndexPath: indexPath!
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
observer.listMonitor(
|
||||||
|
monitor,
|
||||||
|
didDeleteObject: object,
|
||||||
|
fromIndexPath: indexPath!
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerObjectNotification(
|
self.registerObjectNotification(
|
||||||
@@ -536,14 +548,15 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitor(
|
return
|
||||||
monitor,
|
|
||||||
didUpdateObject: object,
|
|
||||||
atIndexPath: indexPath!
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
observer.listMonitor(
|
||||||
|
monitor,
|
||||||
|
didUpdateObject: object,
|
||||||
|
atIndexPath: indexPath!
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerObjectNotification(
|
self.registerObjectNotification(
|
||||||
@@ -552,15 +565,16 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
callback: { [weak observer] (monitor, object, indexPath, newIndexPath) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitor(
|
return
|
||||||
monitor,
|
|
||||||
didMoveObject: object,
|
|
||||||
fromIndexPath: indexPath!,
|
|
||||||
toIndexPath: newIndexPath!
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
observer.listMonitor(
|
||||||
|
monitor,
|
||||||
|
didMoveObject: object,
|
||||||
|
fromIndexPath: indexPath!,
|
||||||
|
toIndexPath: newIndexPath!
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -570,14 +584,15 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, sectionInfo, sectionIndex) -> Void in
|
callback: { [weak observer] (monitor, sectionInfo, sectionIndex) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitor(
|
return
|
||||||
monitor,
|
|
||||||
didInsertSection: sectionInfo,
|
|
||||||
toSectionIndex: sectionIndex
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
observer.listMonitor(
|
||||||
|
monitor,
|
||||||
|
didInsertSection: sectionInfo,
|
||||||
|
toSectionIndex: sectionIndex
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerSectionNotification(
|
self.registerSectionNotification(
|
||||||
@@ -586,14 +601,15 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, sectionInfo, sectionIndex) -> Void in
|
callback: { [weak observer] (monitor, sectionInfo, sectionIndex) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.listMonitor(
|
return
|
||||||
monitor,
|
|
||||||
didDeleteSection: sectionInfo,
|
|
||||||
fromSectionIndex: sectionIndex
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
observer.listMonitor(
|
||||||
|
monitor,
|
||||||
|
didDeleteSection: sectionInfo,
|
||||||
|
fromSectionIndex: sectionIndex
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -686,10 +702,11 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
object: self,
|
object: self,
|
||||||
closure: { [weak self] (note) -> Void in
|
closure: { [weak self] (note) -> Void in
|
||||||
|
|
||||||
if let strongSelf = self {
|
guard let strongSelf = self else {
|
||||||
|
|
||||||
callback(monitor: strongSelf)
|
return
|
||||||
}
|
}
|
||||||
|
callback(monitor: strongSelf)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
forKey: notificationKey,
|
forKey: notificationKey,
|
||||||
@@ -705,17 +722,18 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
object: self,
|
object: self,
|
||||||
closure: { [weak self] (note) -> Void in
|
closure: { [weak self] (note) -> Void in
|
||||||
|
|
||||||
if let strongSelf = self,
|
guard let strongSelf = self,
|
||||||
let userInfo = note.userInfo,
|
let userInfo = note.userInfo,
|
||||||
let object = userInfo[UserInfoKeyObject] as? T {
|
let object = userInfo[UserInfoKeyObject] as? T else {
|
||||||
|
|
||||||
callback(
|
return
|
||||||
monitor: strongSelf,
|
|
||||||
object: object,
|
|
||||||
indexPath: userInfo[UserInfoKeyIndexPath] as? NSIndexPath,
|
|
||||||
newIndexPath: userInfo[UserInfoKeyNewIndexPath] as? NSIndexPath
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
callback(
|
||||||
|
monitor: strongSelf,
|
||||||
|
object: object,
|
||||||
|
indexPath: userInfo[UserInfoKeyIndexPath] as? NSIndexPath,
|
||||||
|
newIndexPath: userInfo[UserInfoKeyNewIndexPath] as? NSIndexPath
|
||||||
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
forKey: notificationKey,
|
forKey: notificationKey,
|
||||||
@@ -731,17 +749,18 @@ public final class ListMonitor<T: NSManagedObject> {
|
|||||||
object: self,
|
object: self,
|
||||||
closure: { [weak self] (note) -> Void in
|
closure: { [weak self] (note) -> Void in
|
||||||
|
|
||||||
if let strongSelf = self,
|
guard let strongSelf = self,
|
||||||
let userInfo = note.userInfo,
|
let userInfo = note.userInfo,
|
||||||
let sectionInfo = userInfo[UserInfoKeySectionInfo] as? NSFetchedResultsSectionInfo,
|
let sectionInfo = userInfo[UserInfoKeySectionInfo] as? NSFetchedResultsSectionInfo,
|
||||||
let sectionIndex = (userInfo[UserInfoKeySectionIndex] as? NSNumber)?.integerValue {
|
let sectionIndex = (userInfo[UserInfoKeySectionIndex] as? NSNumber)?.integerValue else {
|
||||||
|
|
||||||
callback(
|
return
|
||||||
monitor: strongSelf,
|
|
||||||
sectionInfo: sectionInfo,
|
|
||||||
sectionIndex: sectionIndex
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
callback(
|
||||||
|
monitor: strongSelf,
|
||||||
|
sectionInfo: sectionInfo,
|
||||||
|
sectionIndex: sectionIndex
|
||||||
|
)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
forKey: notificationKey,
|
forKey: notificationKey,
|
||||||
|
|||||||
@@ -28,20 +28,6 @@ import CoreData
|
|||||||
import GCDKit
|
import GCDKit
|
||||||
|
|
||||||
|
|
||||||
private let ObjectMonitorWillChangeObjectNotification = "ObjectMonitorWillChangeObjectNotification"
|
|
||||||
private let ObjectMonitorDidDeleteObjectNotification = "ObjectMonitorDidDeleteObjectNotification"
|
|
||||||
private let ObjectMonitorDidUpdateObjectNotification = "ObjectMonitorDidUpdateObjectNotification"
|
|
||||||
|
|
||||||
private let UserInfoKeyObject = "UserInfoKeyObject"
|
|
||||||
|
|
||||||
private struct NotificationKey {
|
|
||||||
|
|
||||||
static var willChangeObject: Void?
|
|
||||||
static var didDeleteObject: Void?
|
|
||||||
static var didUpdateObject: Void?
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// MARK: - ObjectMonitor
|
// MARK: - ObjectMonitor
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -100,10 +86,11 @@ public final class ObjectMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor) -> Void in
|
callback: { [weak observer] (monitor) -> Void in
|
||||||
|
|
||||||
if let object = monitor.object, let observer = observer {
|
guard let object = monitor.object, let observer = observer else {
|
||||||
|
|
||||||
observer.objectMonitor(monitor, willUpdateObject: object)
|
return
|
||||||
}
|
}
|
||||||
|
observer.objectMonitor(monitor, willUpdateObject: object)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerObjectNotification(
|
self.registerObjectNotification(
|
||||||
@@ -112,10 +99,11 @@ public final class ObjectMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak observer] (monitor, object) -> Void in
|
callback: { [weak observer] (monitor, object) -> Void in
|
||||||
|
|
||||||
if let observer = observer {
|
guard let observer = observer else {
|
||||||
|
|
||||||
observer.objectMonitor(monitor, didDeleteObject: object)
|
return
|
||||||
}
|
}
|
||||||
|
observer.objectMonitor(monitor, didDeleteObject: object)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
self.registerObjectNotification(
|
self.registerObjectNotification(
|
||||||
@@ -124,27 +112,29 @@ public final class ObjectMonitor<T: NSManagedObject> {
|
|||||||
toObserver: observer,
|
toObserver: observer,
|
||||||
callback: { [weak self, weak observer] (monitor, object) -> Void in
|
callback: { [weak self, weak observer] (monitor, object) -> Void in
|
||||||
|
|
||||||
if let strongSelf = self, let observer = observer {
|
guard let strongSelf = self, let observer = observer else {
|
||||||
|
|
||||||
let previousCommitedAttributes = strongSelf.lastCommittedAttributes
|
return
|
||||||
let currentCommitedAttributes = object.committedValuesForKeys(nil) as! [String: NSObject]
|
|
||||||
|
|
||||||
var changedKeys = Set<String>()
|
|
||||||
for key in currentCommitedAttributes.keys {
|
|
||||||
|
|
||||||
if previousCommitedAttributes[key] != currentCommitedAttributes[key] {
|
|
||||||
|
|
||||||
changedKeys.insert(key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
strongSelf.lastCommittedAttributes = currentCommitedAttributes
|
|
||||||
observer.objectMonitor(
|
|
||||||
monitor,
|
|
||||||
didUpdateObject: object,
|
|
||||||
changedPersistentKeys: changedKeys
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let previousCommitedAttributes = strongSelf.lastCommittedAttributes
|
||||||
|
let currentCommitedAttributes = object.committedValuesForKeys(nil) as! [String: NSObject]
|
||||||
|
|
||||||
|
var changedKeys = Set<String>()
|
||||||
|
for key in currentCommitedAttributes.keys {
|
||||||
|
|
||||||
|
if previousCommitedAttributes[key] != currentCommitedAttributes[key] {
|
||||||
|
|
||||||
|
changedKeys.insert(key)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strongSelf.lastCommittedAttributes = currentCommitedAttributes
|
||||||
|
observer.objectMonitor(
|
||||||
|
monitor,
|
||||||
|
didUpdateObject: object,
|
||||||
|
changedPersistentKeys: changedKeys
|
||||||
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -222,10 +212,11 @@ public final class ObjectMonitor<T: NSManagedObject> {
|
|||||||
object: self,
|
object: self,
|
||||||
closure: { [weak self] (note) -> Void in
|
closure: { [weak self] (note) -> Void in
|
||||||
|
|
||||||
if let strongSelf = self {
|
guard let strongSelf = self else {
|
||||||
|
|
||||||
callback(monitor: strongSelf)
|
return
|
||||||
}
|
}
|
||||||
|
callback(monitor: strongSelf)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
forKey: notificationKey,
|
forKey: notificationKey,
|
||||||
@@ -241,15 +232,13 @@ public final class ObjectMonitor<T: NSManagedObject> {
|
|||||||
object: self,
|
object: self,
|
||||||
closure: { [weak self] (note) -> Void in
|
closure: { [weak self] (note) -> Void in
|
||||||
|
|
||||||
if let strongSelf = self,
|
guard let strongSelf = self,
|
||||||
let userInfo = note.userInfo,
|
let userInfo = note.userInfo,
|
||||||
let object = userInfo[UserInfoKeyObject] as? T {
|
let object = userInfo[UserInfoKeyObject] as? T else {
|
||||||
|
|
||||||
callback(
|
return
|
||||||
monitor: strongSelf,
|
|
||||||
object: object
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
callback(monitor: strongSelf, object: object)
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
forKey: notificationKey,
|
forKey: notificationKey,
|
||||||
@@ -352,3 +341,17 @@ private final class FetchedResultsControllerDelegate: NSObject, NSFetchedResults
|
|||||||
self.fetchedResultsController?.delegate = nil
|
self.fetchedResultsController?.delegate = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private let ObjectMonitorWillChangeObjectNotification = "ObjectMonitorWillChangeObjectNotification"
|
||||||
|
private let ObjectMonitorDidDeleteObjectNotification = "ObjectMonitorDidDeleteObjectNotification"
|
||||||
|
private let ObjectMonitorDidUpdateObjectNotification = "ObjectMonitorDidUpdateObjectNotification"
|
||||||
|
|
||||||
|
private let UserInfoKeyObject = "UserInfoKeyObject"
|
||||||
|
|
||||||
|
private struct NotificationKey {
|
||||||
|
|
||||||
|
static var willChangeObject: Void?
|
||||||
|
static var didDeleteObject: Void?
|
||||||
|
static var didUpdateObject: Void?
|
||||||
|
}
|
||||||
|
|||||||
@@ -189,31 +189,27 @@ public final class DataStack {
|
|||||||
let coordinator = self.coordinator;
|
let coordinator = self.coordinator;
|
||||||
if let store = coordinator.persistentStoreForURL(fileURL) {
|
if let store = coordinator.persistentStoreForURL(fileURL) {
|
||||||
|
|
||||||
if store.type == NSSQLiteStoreType
|
guard store.type == NSSQLiteStoreType
|
||||||
&& store.configurationName == (configuration ?? Into.defaultConfigurationName) {
|
&& store.configurationName == (configuration ?? Into.defaultConfigurationName) else {
|
||||||
|
|
||||||
return store
|
let error = NSError(coreStoreErrorCode: .DifferentPersistentStoreExistsAtURL)
|
||||||
|
CoreStore.handleError(
|
||||||
|
error,
|
||||||
|
"Failed to add SQLite \(typeName(NSPersistentStore)) at \"\(fileURL)\" because a different \(typeName(NSPersistentStore)) at that URL already exists."
|
||||||
|
)
|
||||||
|
|
||||||
|
throw error
|
||||||
}
|
}
|
||||||
|
|
||||||
let error = NSError(coreStoreErrorCode: .DifferentPersistentStoreExistsAtURL)
|
return store
|
||||||
CoreStore.handleError(
|
|
||||||
error,
|
|
||||||
"Failed to add SQLite \(typeName(NSPersistentStore)) at \"\(fileURL)\" because a different \(typeName(NSPersistentStore)) at that URL already exists."
|
|
||||||
)
|
|
||||||
|
|
||||||
throw error
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let fileManager = NSFileManager.defaultManager()
|
let fileManager = NSFileManager.defaultManager()
|
||||||
do {
|
_ = try? fileManager.createDirectoryAtURL(
|
||||||
|
fileURL.URLByDeletingLastPathComponent!,
|
||||||
try fileManager.createDirectoryAtURL(
|
withIntermediateDirectories: true,
|
||||||
fileURL.URLByDeletingLastPathComponent!,
|
attributes: nil
|
||||||
withIntermediateDirectories: true,
|
)
|
||||||
attributes: nil
|
|
||||||
)
|
|
||||||
}
|
|
||||||
catch _ { }
|
|
||||||
|
|
||||||
var store: NSPersistentStore?
|
var store: NSPersistentStore?
|
||||||
var storeError: NSError?
|
var storeError: NSError?
|
||||||
@@ -377,11 +373,7 @@ public final class DataStack {
|
|||||||
|
|
||||||
for store in self.coordinator.persistentStores {
|
for store in self.coordinator.persistentStores {
|
||||||
|
|
||||||
do {
|
_ = try? self.coordinator.removePersistentStore(store)
|
||||||
|
|
||||||
try self.coordinator.removePersistentStore(store)
|
|
||||||
}
|
|
||||||
catch _ { }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user