This commit is contained in:
John Rommel Estropia
2015-08-28 08:09:06 +09:00
parent d5e769be6c
commit 21a524d725
13 changed files with 240 additions and 251 deletions
@@ -406,12 +406,12 @@ 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,12 +426,12 @@ 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,12 +446,12 @@ 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,12 +482,12 @@ 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
}
} }
+3 -2
View File
@@ -37,12 +37,13 @@ internal final class MigrationManager: NSMigrationManager, NSProgressReporting {
super.didChangeValueForKey(key) super.didChangeValueForKey(key)
if key == "migrationProgress" { guard key == "migrationProgress" else {
return
}
let progress = self.progress let progress = self.progress
progress.completedUnitCount = Int64(Float(progress.totalUnitCount) * self.migrationProgress) progress.completedUnitCount = Int64(Float(progress.totalUnitCount) * self.migrationProgress)
} }
}
// MARK: NSMigrationManager // MARK: NSMigrationManager
+4 -16
View File
@@ -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) let filePath = fileURL.path!
} _ = try? self.removeItemAtPath(filePath.stringByAppendingString("-shm"))
catch _ { } _ = try? self.removeItemAtPath(filePath.stringByAppendingString("-wal"))
do {
try self.removeItemAtPath(fileURL.path!.stringByAppendingString("-shm"))
}
catch _ { }
do {
try self.removeItemAtPath(fileURL.path!.stringByAppendingString("-wal"))
}
catch _ { }
} }
} }
@@ -61,15 +61,15 @@ 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 nil
}
return NSEntityDescription.entityForName( return NSEntityDescription.entityForName(
entityName, entityName,
inManagedObjectContext: self inManagedObjectContext: self
) )
} }
return nil
}
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?
let didSucceed = withExtendedLifetime(self) { (context: NSManagedObjectContext) -> Bool in
do { do {
try withExtendedLifetime(self) { (context: NSManagedObjectContext) -> Void in
try context.obtainPermanentIDsForObjects([object]) try context.obtainPermanentIDsForObjects([object])
return true }
} }
catch { catch {
objectIDError = error as NSError
return false
}
}
if didSucceed != true {
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
@@ -76,7 +69,6 @@ internal extension NSManagedObjectContext {
} }
} }
internal func fetchOne<T: NSManagedObject>(from: From<T>, _ fetchClauses: FetchClause...) -> T? { internal func fetchOne<T: NSManagedObject>(from: From<T>, _ fetchClauses: FetchClause...) -> T? {
return self.fetchOne(from, fetchClauses) return self.fetchOne(from, fetchClauses)
@@ -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,8 +192,10 @@ 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 {
return nil
}
for modelVersion in self.modelVersions ?? [] { for modelVersion in self.modelVersions ?? [] {
if let versionModel = self[modelVersion] where modelHashes == versionModel.entityVersionHashesByName { if let versionModel = self[modelVersion] where modelHashes == versionModel.entityVersionHashesByName {
@@ -201,7 +203,6 @@ internal extension NSManagedObjectModel {
return versionModel return versionModel
} }
} }
}
return nil return nil
} }
+10 -14
View File
@@ -117,15 +117,8 @@ 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 {
completion(PersistentStoreResult(store))
}
return nil
}
let error = NSError(coreStoreErrorCode: .DifferentPersistentStoreExistsAtURL) let error = NSError(coreStoreErrorCode: .DifferentPersistentStoreExistsAtURL)
CoreStore.handleError( CoreStore.handleError(
@@ -135,16 +128,19 @@ public extension DataStack {
throw error throw error
} }
let fileManager = NSFileManager.defaultManager() GCDQueue.Main.async {
do {
try fileManager.createDirectoryAtURL( completion(PersistentStoreResult(store))
}
return nil
}
let fileManager = NSFileManager.defaultManager()
_ = try? fileManager.createDirectoryAtURL(
fileURL.URLByDeletingLastPathComponent!, fileURL.URLByDeletingLastPathComponent!,
withIntermediateDirectories: true, withIntermediateDirectories: true,
attributes: nil attributes: nil
) )
}
catch _ { }
do { do {
+5 -7
View File
@@ -166,13 +166,11 @@ 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,12 +201,12 @@ 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
}
// MARK: Private // MARK: Private
+59 -40
View File
@@ -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,15 +396,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 {
return
}
observer.listMonitor( observer.listMonitor(
monitor, monitor,
didInsertObject: object, didInsertObject: object,
toIndexPath: newIndexPath! toIndexPath: newIndexPath!
) )
} }
}
) )
self.registerObjectNotification( self.registerObjectNotification(
&NotificationKey.didDeleteObject, &NotificationKey.didDeleteObject,
@@ -408,15 +413,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 {
return
}
observer.listMonitor( observer.listMonitor(
monitor, monitor,
didDeleteObject: object, didDeleteObject: object,
fromIndexPath: indexPath! fromIndexPath: indexPath!
) )
} }
}
) )
self.registerObjectNotification( self.registerObjectNotification(
&NotificationKey.didUpdateObject, &NotificationKey.didUpdateObject,
@@ -424,15 +430,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 {
return
}
observer.listMonitor( observer.listMonitor(
monitor, monitor,
didUpdateObject: object, didUpdateObject: object,
atIndexPath: indexPath! atIndexPath: indexPath!
) )
} }
}
) )
self.registerObjectNotification( self.registerObjectNotification(
&NotificationKey.didMoveObject, &NotificationKey.didMoveObject,
@@ -440,8 +447,10 @@ 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 {
return
}
observer.listMonitor( observer.listMonitor(
monitor, monitor,
didMoveObject: object, didMoveObject: object,
@@ -449,7 +458,6 @@ public final class ListMonitor<T: NSManagedObject> {
toIndexPath: newIndexPath! 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,15 +514,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 {
return
}
observer.listMonitor( observer.listMonitor(
monitor, monitor,
didInsertObject: object, didInsertObject: object,
toIndexPath: newIndexPath! toIndexPath: newIndexPath!
) )
} }
}
) )
self.registerObjectNotification( self.registerObjectNotification(
&NotificationKey.didDeleteObject, &NotificationKey.didDeleteObject,
@@ -520,15 +531,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 {
return
}
observer.listMonitor( observer.listMonitor(
monitor, monitor,
didDeleteObject: object, didDeleteObject: object,
fromIndexPath: indexPath! fromIndexPath: indexPath!
) )
} }
}
) )
self.registerObjectNotification( self.registerObjectNotification(
&NotificationKey.didUpdateObject, &NotificationKey.didUpdateObject,
@@ -536,15 +548,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 {
return
}
observer.listMonitor( observer.listMonitor(
monitor, monitor,
didUpdateObject: object, didUpdateObject: object,
atIndexPath: indexPath! atIndexPath: indexPath!
) )
} }
}
) )
self.registerObjectNotification( self.registerObjectNotification(
&NotificationKey.didMoveObject, &NotificationKey.didMoveObject,
@@ -552,8 +565,10 @@ 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 {
return
}
observer.listMonitor( observer.listMonitor(
monitor, monitor,
didMoveObject: object, didMoveObject: object,
@@ -561,7 +576,6 @@ public final class ListMonitor<T: NSManagedObject> {
toIndexPath: newIndexPath! toIndexPath: newIndexPath!
) )
} }
}
) )
self.registerSectionNotification( self.registerSectionNotification(
@@ -570,15 +584,16 @@ 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 {
return
}
observer.listMonitor( observer.listMonitor(
monitor, monitor,
didInsertSection: sectionInfo, didInsertSection: sectionInfo,
toSectionIndex: sectionIndex toSectionIndex: sectionIndex
) )
} }
}
) )
self.registerSectionNotification( self.registerSectionNotification(
&NotificationKey.didDeleteSection, &NotificationKey.didDeleteSection,
@@ -586,15 +601,16 @@ 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 {
return
}
observer.listMonitor( observer.listMonitor(
monitor, monitor,
didDeleteSection: sectionInfo, didDeleteSection: sectionInfo,
fromSectionIndex: sectionIndex 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,10 +722,12 @@ 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 {
return
}
callback( callback(
monitor: strongSelf, monitor: strongSelf,
object: object, object: object,
@@ -716,7 +735,6 @@ public final class ListMonitor<T: NSManagedObject> {
newIndexPath: userInfo[UserInfoKeyNewIndexPath] as? NSIndexPath newIndexPath: userInfo[UserInfoKeyNewIndexPath] as? NSIndexPath
) )
} }
}
), ),
forKey: notificationKey, forKey: notificationKey,
inObject: observer inObject: observer
@@ -731,18 +749,19 @@ 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 {
return
}
callback( callback(
monitor: strongSelf, monitor: strongSelf,
sectionInfo: sectionInfo, sectionInfo: sectionInfo,
sectionIndex: sectionIndex sectionIndex: sectionIndex
) )
} }
}
), ),
forKey: notificationKey, forKey: notificationKey,
inObject: observer inObject: observer
+31 -28
View File
@@ -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,7 +112,10 @@ 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 {
return
}
let previousCommitedAttributes = strongSelf.lastCommittedAttributes let previousCommitedAttributes = strongSelf.lastCommittedAttributes
let currentCommitedAttributes = object.committedValuesForKeys(nil) as! [String: NSObject] let currentCommitedAttributes = object.committedValuesForKeys(nil) as! [String: NSObject]
@@ -145,7 +136,6 @@ public final class ObjectMonitor<T: NSManagedObject> {
changedPersistentKeys: changedKeys 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?
}
+7 -15
View File
@@ -189,11 +189,8 @@ 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) let error = NSError(coreStoreErrorCode: .DifferentPersistentStoreExistsAtURL)
CoreStore.handleError( CoreStore.handleError(
@@ -204,16 +201,15 @@ public final class DataStack {
throw error throw error
} }
let fileManager = NSFileManager.defaultManager() return store
do { }
try fileManager.createDirectoryAtURL( let fileManager = NSFileManager.defaultManager()
_ = try? fileManager.createDirectoryAtURL(
fileURL.URLByDeletingLastPathComponent!, fileURL.URLByDeletingLastPathComponent!,
withIntermediateDirectories: true, withIntermediateDirectories: true,
attributes: nil 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 _ { }
} }
} }
} }