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

View File

@@ -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
} }
} }

View File

@@ -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)
} }

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)
}
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 _ { }
} }
} }

View File

@@ -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 {

View File

@@ -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? {

View File

@@ -46,7 +46,7 @@ internal extension NSManagedObjectContext {
} }
set { set {
if self.parentContext != nil { guard self.parentContext == nil else {
return return
} }

View File

@@ -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 {

View File

@@ -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

View File

@@ -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 {

View File

@@ -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
} }

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,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,

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,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?
}

View File

@@ -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 _ { }
} }
} }
} }