mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-03-27 11:51:31 +01:00
Simpler API for creating CoreStore-managed NSFetchedResultsControllers, useful for external SDK's that require them
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
Pod::Spec.new do |s|
|
Pod::Spec.new do |s|
|
||||||
s.name = "CoreStore"
|
s.name = "CoreStore"
|
||||||
s.version = "1.6.7"
|
s.version = "1.6.8"
|
||||||
s.license = "MIT"
|
s.license = "MIT"
|
||||||
s.summary = "Unleashing the real power of Core Data with the elegance and safety of Swift"
|
s.summary = "Unleashing the real power of Core Data with the elegance and safety of Swift"
|
||||||
s.homepage = "https://github.com/JohnEstropia/CoreStore"
|
s.homepage = "https://github.com/JohnEstropia/CoreStore"
|
||||||
|
|||||||
@@ -32,8 +32,170 @@ import CoreData
|
|||||||
public extension NSFetchedResultsController {
|
public extension NSFetchedResultsController {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Utility for creating an `NSFetchedResultsController` from a `DataStack`. This is useful to partially support Objective-C classes by passing an `NSFetchedResultsController` instance instead of a `ListMonitor`.
|
Utility for creating an `NSFetchedResultsController` from a `DataStack`. This is useful when an `NSFetchedResultsController` is preferred over the overhead of `ListMonitor`s abstraction.
|
||||||
|
|
||||||
|
- parameter dataStack: the `DataStack` to observe objects from
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter sectionBy: a `SectionBy` clause indicating the keyPath for the attribute to use when sorting the list into sections
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for fetching the object list. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- returns: an `NSFetchedResultsController` that observes a `DataStack`
|
||||||
*/
|
*/
|
||||||
|
@nonobjc
|
||||||
|
public static func createFor<T: NSManagedObject>(dataStack: DataStack, _ from: From<T>, _ sectionBy: SectionBy, _ fetchClauses: FetchClause...) -> NSFetchedResultsController {
|
||||||
|
|
||||||
|
return CoreStoreFetchedResultsController<T>(
|
||||||
|
context: dataStack.mainContext,
|
||||||
|
fetchRequest: CoreStoreFetchRequest(),
|
||||||
|
from: from,
|
||||||
|
sectionBy: sectionBy,
|
||||||
|
fetchClauses: fetchClauses
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Utility for creating an `NSFetchedResultsController` from a `DataStack`. This is useful when an `NSFetchedResultsController` is preferred over the overhead of `ListMonitor`s abstraction.
|
||||||
|
|
||||||
|
- parameter dataStack: the `DataStack` to observe objects from
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter sectionBy: a `SectionBy` clause indicating the keyPath for the attribute to use when sorting the list into sections
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for fetching the object list. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- returns: an `NSFetchedResultsController` that observes a `DataStack`
|
||||||
|
*/
|
||||||
|
@nonobjc
|
||||||
|
public static func createFor<T: NSManagedObject>(dataStack: DataStack, _ from: From<T>, _ sectionBy: SectionBy, _ fetchClauses: [FetchClause]) -> NSFetchedResultsController {
|
||||||
|
|
||||||
|
return CoreStoreFetchedResultsController<T>(
|
||||||
|
context: dataStack.mainContext,
|
||||||
|
fetchRequest: CoreStoreFetchRequest(),
|
||||||
|
from: from,
|
||||||
|
sectionBy: sectionBy,
|
||||||
|
fetchClauses: fetchClauses
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Utility for creating an `NSFetchedResultsController` from a `DataStack`. This is useful when an `NSFetchedResultsController` is preferred over the overhead of `ListMonitor`s abstraction.
|
||||||
|
|
||||||
|
- parameter dataStack: the `DataStack` to observe objects from
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for fetching the object list. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- returns: an `NSFetchedResultsController` that observes a `DataStack`
|
||||||
|
*/
|
||||||
|
@nonobjc
|
||||||
|
public static func createFor<T: NSManagedObject>(dataStack: DataStack, _ from: From<T>, _ fetchClauses: FetchClause...) -> NSFetchedResultsController {
|
||||||
|
|
||||||
|
return CoreStoreFetchedResultsController<T>(
|
||||||
|
context: dataStack.mainContext,
|
||||||
|
fetchRequest: CoreStoreFetchRequest(),
|
||||||
|
from: from,
|
||||||
|
sectionBy: nil,
|
||||||
|
fetchClauses: fetchClauses
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Utility for creating an `NSFetchedResultsController` from a `DataStack`. This is useful when an `NSFetchedResultsController` is preferred over the overhead of `ListMonitor`s abstraction.
|
||||||
|
|
||||||
|
- parameter dataStack: the `DataStack` to observe objects from
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for fetching the object list. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- returns: an `NSFetchedResultsController` that observes a `DataStack`
|
||||||
|
*/
|
||||||
|
@nonobjc
|
||||||
|
public static func createFor<T: NSManagedObject>(dataStack: DataStack, _ from: From<T>, _ fetchClauses: [FetchClause]) -> NSFetchedResultsController {
|
||||||
|
|
||||||
|
return CoreStoreFetchedResultsController<T>(
|
||||||
|
context: dataStack.mainContext,
|
||||||
|
fetchRequest: CoreStoreFetchRequest(),
|
||||||
|
from: from,
|
||||||
|
sectionBy: nil,
|
||||||
|
fetchClauses: fetchClauses
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Utility for creating an `NSFetchedResultsController` from an `UnsafeDataTransaction`. This is useful when an `NSFetchedResultsController` is preferred over the overhead of `ListMonitor`s abstraction.
|
||||||
|
|
||||||
|
- parameter transaction: the `UnsafeDataTransaction` to observe objects from
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter sectionBy: a `SectionBy` clause indicating the keyPath for the attribute to use when sorting the list into sections
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for fetching the object list. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- returns: an `NSFetchedResultsController` that observes an `UnsafeDataTransaction`
|
||||||
|
*/
|
||||||
|
@nonobjc
|
||||||
|
public static func createFor<T: NSManagedObject>(transaction: UnsafeDataTransaction, _ from: From<T>, _ sectionBy: SectionBy, _ fetchClauses: FetchClause...) -> NSFetchedResultsController {
|
||||||
|
|
||||||
|
return CoreStoreFetchedResultsController<T>(
|
||||||
|
context: transaction.context,
|
||||||
|
fetchRequest: CoreStoreFetchRequest(),
|
||||||
|
from: from,
|
||||||
|
sectionBy: sectionBy,
|
||||||
|
fetchClauses: fetchClauses
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Utility for creating an `NSFetchedResultsController` from an `UnsafeDataTransaction`. This is useful when an `NSFetchedResultsController` is preferred over the overhead of `ListMonitor`s abstraction.
|
||||||
|
|
||||||
|
- parameter transaction: the `UnsafeDataTransaction` to observe objects from
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter sectionBy: a `SectionBy` clause indicating the keyPath for the attribute to use when sorting the list into sections
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for fetching the object list. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- returns: an `NSFetchedResultsController` that observes an `UnsafeDataTransaction`
|
||||||
|
*/
|
||||||
|
@nonobjc
|
||||||
|
public static func createFor<T: NSManagedObject>(transaction: UnsafeDataTransaction, _ from: From<T>, _ sectionBy: SectionBy, _ fetchClauses: [FetchClause]) -> NSFetchedResultsController {
|
||||||
|
|
||||||
|
return CoreStoreFetchedResultsController<T>(
|
||||||
|
context: transaction.context,
|
||||||
|
fetchRequest: CoreStoreFetchRequest(),
|
||||||
|
from: from,
|
||||||
|
sectionBy: sectionBy,
|
||||||
|
fetchClauses: fetchClauses
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Utility for creating an `NSFetchedResultsController` from an `UnsafeDataTransaction`. This is useful when an `NSFetchedResultsController` is preferred over the overhead of `ListMonitor`s abstraction.
|
||||||
|
|
||||||
|
- parameter transaction: the `UnsafeDataTransaction` to observe objects from
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for fetching the object list. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
- returns: an `NSFetchedResultsController` that observes an `UnsafeDataTransaction`
|
||||||
|
*/
|
||||||
|
@nonobjc
|
||||||
|
public static func createFor<T: NSManagedObject>(transaction: UnsafeDataTransaction, _ from: From<T>, _ fetchClauses: FetchClause...) -> NSFetchedResultsController {
|
||||||
|
|
||||||
|
return CoreStoreFetchedResultsController<T>(
|
||||||
|
context: transaction.context,
|
||||||
|
fetchRequest: CoreStoreFetchRequest(),
|
||||||
|
from: from,
|
||||||
|
sectionBy: nil,
|
||||||
|
fetchClauses: fetchClauses
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Utility for creating an `NSFetchedResultsController` from an `UnsafeDataTransaction`. This is useful when an `NSFetchedResultsController` is preferred over the overhead of `ListMonitor`s abstraction.
|
||||||
|
|
||||||
|
- parameter transaction: the `UnsafeDataTransaction` to observe objects from
|
||||||
|
- parameter from: a `From` clause indicating the entity type
|
||||||
|
- parameter fetchClauses: a series of `FetchClause` instances for fetching the object list. Accepts `Where`, `OrderBy`, and `Tweak` clauses.
|
||||||
|
*/
|
||||||
|
@nonobjc
|
||||||
|
public static func createFor<T: NSManagedObject>(transaction: UnsafeDataTransaction, _ from: From<T>, _ fetchClauses: [FetchClause]) -> NSFetchedResultsController {
|
||||||
|
|
||||||
|
return CoreStoreFetchedResultsController<T>(
|
||||||
|
context: transaction.context,
|
||||||
|
fetchRequest: CoreStoreFetchRequest(),
|
||||||
|
from: from,
|
||||||
|
sectionBy: nil,
|
||||||
|
fetchClauses: fetchClauses
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@available(*, deprecated=1.6.8, message="Use NSFetchedResultsController.createFor(_:_:_:_:) instead.")
|
||||||
|
@nonobjc
|
||||||
public static func createForStack<T: NSManagedObject>(dataStack: DataStack, fetchRequest: NSFetchRequest, from: From<T>? = nil, sectionBy: SectionBy? = nil, fetchClauses: [FetchClause]) -> NSFetchedResultsController {
|
public static func createForStack<T: NSManagedObject>(dataStack: DataStack, fetchRequest: NSFetchRequest, from: From<T>? = nil, sectionBy: SectionBy? = nil, fetchClauses: [FetchClause]) -> NSFetchedResultsController {
|
||||||
|
|
||||||
return CoreStoreFetchedResultsController<T>(
|
return CoreStoreFetchedResultsController<T>(
|
||||||
@@ -45,7 +207,8 @@ public extension NSFetchedResultsController {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@available(*, deprecated=1.5.2, message="Use NSFetchedResultsController.createForStack(_:fetchRequest:from:sectionBy:fetchClauses:) to create NSFetchedResultsControllers directly")
|
@available(*, deprecated=1.5.2, message="Use NSFetchedResultsController.createFor(_:_:_:_:) to create NSFetchedResultsControllers directly")
|
||||||
|
@nonobjc
|
||||||
public convenience init<T: NSManagedObject>(dataStack: DataStack, fetchRequest: NSFetchRequest, from: From<T>? = nil, sectionBy: SectionBy? = nil, fetchClauses: [FetchClause]) {
|
public convenience init<T: NSManagedObject>(dataStack: DataStack, fetchRequest: NSFetchRequest, from: From<T>? = nil, sectionBy: SectionBy? = nil, fetchClauses: [FetchClause]) {
|
||||||
|
|
||||||
let context = dataStack.mainContext
|
let context = dataStack.mainContext
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.6.7</string>
|
<string>1.6.8</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
|
|||||||
@@ -48,6 +48,10 @@ internal final class CoreStoreFetchedResultsController<T: NSManagedObject>: NSFe
|
|||||||
|
|
||||||
internal init<T>(context: NSManagedObjectContext, fetchRequest: NSFetchRequest, from: From<T>? = nil, sectionBy: SectionBy? = nil, fetchClauses: [FetchClause]) {
|
internal init<T>(context: NSManagedObjectContext, fetchRequest: NSFetchRequest, from: From<T>? = nil, sectionBy: SectionBy? = nil, fetchClauses: [FetchClause]) {
|
||||||
|
|
||||||
|
CoreStore.assert(
|
||||||
|
fetchClauses.filter { $0 is OrderBy }.count > 0,
|
||||||
|
"An \(typeName(NSFetchedResultsController)) requires an OrderBy clause."
|
||||||
|
)
|
||||||
from?.applyToFetchRequest(fetchRequest, context: context, applyAffectedStores: false)
|
from?.applyToFetchRequest(fetchRequest, context: context, applyAffectedStores: false)
|
||||||
for clause in fetchClauses {
|
for clause in fetchClauses {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user