mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-01-18 15:07:00 +01:00
added demo for observing changes to a single managed object
This commit is contained in:
@@ -108,7 +108,7 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
||||
:param: object the NSManagedObject type to be edited
|
||||
:returns: an editable proxy for the specified NSManagedObject.
|
||||
*/
|
||||
public override func fetch<T: NSManagedObject>(object: T) -> T? {
|
||||
public override func fetch<T: NSManagedObject>(object: T?) -> T? {
|
||||
|
||||
HardcoreData.assert(!self.isCommitted, "Attempted to update an entity of type \(typeName(object)) from an already committed \(typeName(self)).")
|
||||
|
||||
@@ -120,7 +120,7 @@ public final class AsynchronousDataTransaction: BaseDataTransaction {
|
||||
|
||||
:param: object the NSManagedObject type to be deleted
|
||||
*/
|
||||
public override func delete(object: NSManagedObject) {
|
||||
public override func delete(object: NSManagedObject?) {
|
||||
|
||||
HardcoreData.assert(!self.isCommitted, "Attempted to delete an entity of type \(typeName(object)) from an already committed \(typeName(self)).")
|
||||
|
||||
|
||||
@@ -61,11 +61,11 @@ public /*abstract*/ class BaseDataTransaction {
|
||||
:param: object the NSManagedObject type to be edited
|
||||
:returns: an editable proxy for the specified NSManagedObject.
|
||||
*/
|
||||
public func fetch<T: NSManagedObject>(object: T) -> T? {
|
||||
public func fetch<T: NSManagedObject>(object: T?) -> T? {
|
||||
|
||||
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to update an entity of type \(typeName(object)) outside its designated queue.")
|
||||
|
||||
return object.inContext(self.context)
|
||||
return object?.inContext(self.context)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -73,11 +73,11 @@ public /*abstract*/ class BaseDataTransaction {
|
||||
|
||||
:param: object the NSManagedObject type to be deleted
|
||||
*/
|
||||
public func delete(object: NSManagedObject) {
|
||||
public func delete(object: NSManagedObject?) {
|
||||
|
||||
HardcoreData.assert(self.transactionQueue.isCurrentExecutionContext(), "Attempted to delete an entity of type \(typeName(object)) outside its designated queue.")
|
||||
|
||||
object.inContext(self.context)?.deleteFromContext()
|
||||
object?.inContext(self.context)?.deleteFromContext()
|
||||
}
|
||||
|
||||
// MARK: Saving changes
|
||||
|
||||
@@ -46,6 +46,11 @@ public extension DataStack {
|
||||
|
||||
public func observeObjectList<T: NSManagedObject>(from: From<T>, _ groupBy: GroupBy? = nil, _ queryClauses: FetchClause...) -> ManagedObjectListController<T> {
|
||||
|
||||
return self.observeObjectList(from, groupBy, queryClauses)
|
||||
}
|
||||
|
||||
public func observeObjectList<T: NSManagedObject>(from: From<T>, _ groupBy: GroupBy? = nil, _ queryClauses: [FetchClause]) -> ManagedObjectListController<T> {
|
||||
|
||||
HardcoreData.assert(GCDQueue.Main.isCurrentExecutionContext(), "Attempted to observe objects from \(typeName(self)) outside the main queue.")
|
||||
|
||||
// TODO: sectionNameKeyPath and cacheResults
|
||||
|
||||
27
HardcoreData/HardcoreData+Observing.swift
Normal file
27
HardcoreData/HardcoreData+Observing.swift
Normal file
@@ -0,0 +1,27 @@
|
||||
//
|
||||
// HardcoreData+Observing.swift
|
||||
// HardcoreData
|
||||
//
|
||||
// Created by John Rommel Estropia on 2015/05/06.
|
||||
// Copyright (c) 2015 John Rommel Estropia. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
// MARK: - HardcoreData
|
||||
|
||||
public extension HardcoreData {
|
||||
|
||||
// MARK: Public
|
||||
|
||||
public static func observeObject<T: NSManagedObject>(object: T) -> ManagedObjectController<T> {
|
||||
|
||||
return self.defaultStack.observeObject(object)
|
||||
}
|
||||
|
||||
public static func observeObjectList<T: NSManagedObject>(from: From<T>, _ groupBy: GroupBy? = nil, _ queryClauses: FetchClause...) -> ManagedObjectListController<T> {
|
||||
|
||||
return self.defaultStack.observeObjectList(from, groupBy, queryClauses)
|
||||
}
|
||||
}
|
||||
@@ -169,9 +169,9 @@ public final class ManagedObjectController<T: NSManagedObject>: FetchedResultsCo
|
||||
fetchRequest.entity = context.entityDescriptionForEntityClass(T.self)
|
||||
fetchRequest.fetchLimit = 1
|
||||
fetchRequest.resultType = .ManagedObjectResultType
|
||||
fetchRequest.sortDescriptors = []
|
||||
|
||||
Where("SELF", isEqualTo: object).applyToFetchRequest(fetchRequest)
|
||||
SortedBy(.Ascending("objectID")).applyToFetchRequest(fetchRequest)
|
||||
|
||||
let fetchedResultsController = NSFetchedResultsController(
|
||||
fetchRequest: fetchRequest,
|
||||
|
||||
@@ -66,7 +66,7 @@ public final class SynchronousDataTransaction: BaseDataTransaction {
|
||||
:param: object the NSManagedObject type to be edited
|
||||
:returns: an editable proxy for the specified NSManagedObject.
|
||||
*/
|
||||
public override func fetch<T: NSManagedObject>(object: T) -> T? {
|
||||
public override func fetch<T: NSManagedObject>(object: T?) -> T? {
|
||||
|
||||
HardcoreData.assert(!self.isCommitted, "Attempted to update an entity of type \(typeName(object)) from an already committed \(typeName(self)).")
|
||||
|
||||
@@ -78,7 +78,7 @@ public final class SynchronousDataTransaction: BaseDataTransaction {
|
||||
|
||||
:param: object the NSManagedObject type to be deleted
|
||||
*/
|
||||
public override func delete(object: NSManagedObject) {
|
||||
public override func delete(object: NSManagedObject?) {
|
||||
|
||||
HardcoreData.assert(!self.isCommitted, "Attempted to delete an entity of type \(typeName(object)) from an already committed \(typeName(self)).")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user