1- //
2- // NSManagedObjectContext+Rx.swift
3- // RxCoreData
4- //
5- // Created by Krunoslav Zaher on 5/18/16.
6- // Copyright © 2016 Krunoslav Zaher. All rights reserved.
7- //
8-
91import Foundation
102import CoreData
113import RxSwift
@@ -20,18 +12,18 @@ public extension Reactive where Base: NSManagedObjectContext {
2012 - returns: An `Observable` array of `NSManagedObjects` objects that can be bound to a table view.
2113 */
2214 func entities< T: NSManagedObject > ( fetchRequest: NSFetchRequest < T > ,
23- sectionNameKeyPath: String ? = nil ,
24- cacheName: String ? = nil ) -> Observable < [ T ] > {
15+ sectionNameKeyPath: String ? = nil ,
16+ cacheName: String ? = nil ) -> Observable < [ T ] > {
17+
2518 return Observable . create { observer in
26-
27- let observerAdapter = FetchedResultsControllerEntityObserver ( observer: observer, fetchRequest: fetchRequest, managedObjectContext: self . base, sectionNameKeyPath: sectionNameKeyPath, cacheName: cacheName)
28-
29- return Disposables . create {
30- observerAdapter. dispose ( )
31- }
19+ let observerAdapter = FetchedResultsControllerEntityObserver ( observer: observer, fetchRequest: fetchRequest, managedObjectContext: self . base, sectionNameKeyPath: sectionNameKeyPath, cacheName: cacheName)
20+
21+ return Disposables . create {
22+ observerAdapter. dispose ( )
23+ }
3224 }
3325 }
34-
26+
3527 /**
3628 Executes a fetch request and returns the fetched section objects as an `Observable` array of `NSFetchedResultsSectionInfo`.
3729 - parameter fetchRequest: an instance of `NSFetchRequest` to describe the search criteria used to retrieve data from a persistent store
@@ -40,8 +32,9 @@ public extension Reactive where Base: NSManagedObjectContext {
4032 - returns: An `Observable` array of `NSFetchedResultsSectionInfo` objects that can be bound to a table view.
4133 */
4234 func sections< T: NSManagedObject > ( fetchRequest: NSFetchRequest < T > ,
43- sectionNameKeyPath: String ? = nil ,
44- cacheName: String ? = nil ) -> Observable < [ NSFetchedResultsSectionInfo ] > {
35+ sectionNameKeyPath: String ? = nil ,
36+ cacheName: String ? = nil ) -> Observable < [ NSFetchedResultsSectionInfo ] > {
37+
4538 return Observable . create { observer in
4639 let frc = NSFetchedResultsController ( fetchRequest: fetchRequest,
4740 managedObjectContext: self . base,
@@ -60,15 +53,13 @@ public extension Reactive where Base: NSManagedObjectContext {
6053 - parameter updateAction: a throwing update action
6154 */
6255 func performUpdate( updateAction: ( NSManagedObjectContext ) throws -> Void ) throws {
56+
6357 let privateContext = NSManagedObjectContext ( concurrencyType: . privateQueueConcurrencyType)
6458 privateContext. parent = self . base
6559
6660 try updateAction ( privateContext)
67-
6861 guard privateContext. hasChanges else { return }
69-
7062 try privateContext. save ( )
71-
7263 try self . base. save ( )
7364 }
7465}
@@ -95,6 +86,7 @@ public extension Reactive where Base: NSManagedObjectContext {
9586 - parameter persistable: a `Persistable` object
9687 */
9788 func delete< P: Persistable > ( _ persistable: P ) throws {
89+
9890 if let entity = try get ( persistable) {
9991 self . base. delete ( entity)
10092
@@ -115,16 +107,14 @@ public extension Reactive where Base: NSManagedObjectContext {
115107 - returns: An `Observable` array of `Persistable` objects that can be bound to a table view.
116108 */
117109 func entities< P: Persistable > ( _ type: P . Type = P . self,
118- predicate: NSPredicate ? = nil ,
119- sortDescriptors: [ NSSortDescriptor ] ? = nil ) -> Observable < [ P ] > {
110+ predicate: NSPredicate ? = nil ,
111+ sortDescriptors: [ NSSortDescriptor ] ? = nil ) -> Observable < [ P ] > {
112+
120113 let fetchRequest : NSFetchRequest < P . T > = NSFetchRequest ( entityName: P . entityName)
121114 fetchRequest. predicate = predicate
122115 fetchRequest. sortDescriptors = sortDescriptors ?? [ NSSortDescriptor ( key: P . primaryAttributeName, ascending: true ) ]
123116
124- return entities ( fetchRequest: fetchRequest)
125- . map {
126- $0. map ( P . init)
127- }
117+ return entities ( fetchRequest: fetchRequest) . map { $0. map ( P . init) }
128118 }
129119
130120 /**
0 commit comments