update top header graph view when custom color changes
code cleanup
This commit is contained in:
@@ -12,9 +12,7 @@ class PersistenceController {
|
||||
@AppStorage(UserDefaultsStore.Keys.useCloudKit.rawValue, store: GroupUserDefaults.groupDefaults) private var useCloudKit = false
|
||||
|
||||
static let shared = PersistenceController.persistenceController
|
||||
|
||||
public var listeners = [(() -> Void)]()
|
||||
|
||||
|
||||
private static var persistenceController: PersistenceController {
|
||||
return PersistenceController(inMemory: false)
|
||||
}
|
||||
@@ -23,8 +21,14 @@ class PersistenceController {
|
||||
return PersistenceController.shared.container.viewContext
|
||||
}
|
||||
|
||||
public lazy var childContext: NSManagedObjectContext = {
|
||||
NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
|
||||
}()
|
||||
|
||||
public var switchContainerListeners = [(() -> Void)]()
|
||||
|
||||
private var editedDataClosure = [() -> Void]()
|
||||
|
||||
public var earliestEntry: MoodEntry? {
|
||||
let fetchRequest = NSFetchRequest<MoodEntry>(entityName: "MoodEntry")
|
||||
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "forDate", ascending: true)]
|
||||
@@ -50,6 +54,16 @@ class PersistenceController {
|
||||
item()
|
||||
}
|
||||
}
|
||||
|
||||
public func addNewDataListener(closure: @escaping (() -> Void)) {
|
||||
editedDataClosure.append(closure)
|
||||
}
|
||||
|
||||
public func runDataListeners() {
|
||||
for closure in editedDataClosure {
|
||||
closure()
|
||||
}
|
||||
}
|
||||
|
||||
private func setupContainer() -> NSPersistentContainer {
|
||||
if useCloudKit {
|
||||
@@ -79,12 +93,6 @@ class PersistenceController {
|
||||
init(inMemory: Bool = false) {
|
||||
container = setupContainer()
|
||||
}
|
||||
|
||||
func updateListeners() {
|
||||
for listener in listeners {
|
||||
listener()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension NSManagedObjectContext {
|
||||
|
||||
@@ -25,7 +25,7 @@ extension PersistenceController {
|
||||
|
||||
do {
|
||||
try viewContext.save()
|
||||
updateListeners()
|
||||
runDataListeners()
|
||||
} catch {
|
||||
let nsError = error as NSError
|
||||
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
|
||||
|
||||
@@ -15,7 +15,7 @@ extension PersistenceController {
|
||||
do {
|
||||
try viewContext.executeAndMergeChanges(using: deleteRequest)
|
||||
try viewContext.save()
|
||||
updateListeners()
|
||||
runDataListeners()
|
||||
} catch let error as NSError {
|
||||
fatalError("Unresolved error \(error), \(error.userInfo)")
|
||||
}
|
||||
@@ -25,7 +25,7 @@ extension PersistenceController {
|
||||
if let entry = PersistenceController.shared.getEntry(byDate: forDate) {
|
||||
viewContext.delete(entry)
|
||||
try! viewContext.save()
|
||||
updateListeners()
|
||||
runDataListeners()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,10 +8,6 @@
|
||||
import CoreData
|
||||
|
||||
extension PersistenceController {
|
||||
private var childContext: NSManagedObjectContext {
|
||||
return NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
|
||||
}
|
||||
|
||||
public func randomEntries(count: Int) -> [MoodEntry] {
|
||||
var entries = [MoodEntry]()
|
||||
|
||||
@@ -63,19 +59,24 @@ extension PersistenceController {
|
||||
}
|
||||
|
||||
func populateTestData() {
|
||||
for idx in 1..<120 {
|
||||
let newItem = MoodEntry(context: viewContext)
|
||||
newItem.timestamp = Date()
|
||||
newItem.moodValue = Int16(Mood.allValues.randomElement()!.rawValue)
|
||||
newItem.canEdit = true
|
||||
newItem.canDelete = true
|
||||
|
||||
let date = Calendar.current.date(byAdding: .day, value: -idx, to: Date())!
|
||||
newItem.forDate = date
|
||||
newItem.weekDay = Int16(Calendar.current.component(.weekday, from: date))
|
||||
}
|
||||
do {
|
||||
self.clearDB()
|
||||
try viewContext.save()
|
||||
|
||||
for idx in 1..<120 {
|
||||
let newItem = MoodEntry(context: viewContext)
|
||||
newItem.timestamp = Date()
|
||||
newItem.moodValue = Int16(Mood.allValues.randomElement()!.rawValue)
|
||||
newItem.canEdit = true
|
||||
newItem.canDelete = true
|
||||
|
||||
let date = Calendar.current.date(byAdding: .day, value: -idx, to: Date())!
|
||||
newItem.forDate = date
|
||||
newItem.weekDay = Int16(Calendar.current.component(.weekday, from: date))
|
||||
}
|
||||
|
||||
try viewContext.save()
|
||||
runDataListeners()
|
||||
} catch {
|
||||
// Replace this implementation with code to handle the error appropriately.
|
||||
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
|
||||
|
||||
@@ -37,7 +37,7 @@ extension PersistenceController {
|
||||
return false
|
||||
}
|
||||
|
||||
updateListeners()
|
||||
runDataListeners()
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user