From dd0436511abf6c7a00c7fc4530adf31b841e81f8 Mon Sep 17 00:00:00 2001 From: nythepegasus Date: Thu, 9 May 2024 00:27:03 -0400 Subject: [PATCH] Supports non-NSManagedObjects for @Managed properties This allows us to use @Managed with properties that may or may not be NSManagedObjects at runtime (e.g. protocols). If they are, Managed will keep strong reference to context like before. --- AltStore/Types/Managed.swift | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/AltStore/Types/Managed.swift b/AltStore/Types/Managed.swift index 1bce7bb4..425032f8 100644 --- a/AltStore/Types/Managed.swift +++ b/AltStore/Types/Managed.swift @@ -10,23 +10,27 @@ import Foundation import CoreData @propertyWrapper @dynamicMemberLookup -struct Managed +struct Managed { var wrappedValue: ManagedObject { didSet { - self.managedObjectContext = self.wrappedValue.managedObjectContext + self.managedObjectContext = self.managedObject?.managedObjectContext } } - private var managedObjectContext: NSManagedObjectContext? - + var projectedValue: Managed { return self } + private var managedObjectContext: NSManagedObjectContext? + private var managedObject: NSManagedObject? { + return self.wrappedValue as? NSManagedObject + } + init(wrappedValue: ManagedObject) { self.wrappedValue = wrappedValue - self.managedObjectContext = wrappedValue.managedObjectContext + self.managedObjectContext = self.managedObject?.managedObjectContext } subscript(dynamicMember keyPath: KeyPath) -> T