From b181b2e7a4617ecccb00be6bccc5fb8497fa7aa3 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 15 Nov 2022 16:50:12 -0600 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 | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/AltStore/Types/Managed.swift b/AltStore/Types/Managed.swift index 1bce7bb4..ead14494 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