Hinzufügen von benutzerdefinierten Methoden, um eine Unterklasse NSManagedObject
Ich habe einen Core Data-Modell, bei dem ich eine Person Ein, die eine abstrakte. Personen B, C und D Erben von Person A. Es sind mehrere Eigenschaften definiert, die in Unternehmen A, die B, C und D.
Möchte ich nutzen, diese erbschaft in meinem Modell-code. Zusätzlich zu den Eigenschaften, ich Frage mich, ob ich hinzufügen können Methoden der Entitäten Ein, die umgesetzt werden, in sub-Entitäten.
Beispiel:
- Ich eine Methode hinzufügen, um die Schnittstelle für die Person ist, die einen Wert zurückgibt, und hat ein argument
- Ich hinzufügen, dass Implementierungen dieser Methode zu A, B, C, D
- Dann rufe ich
executeFetchRequest:
zum abrufen aller Instanzen von B - Rufe ich die Methode auf die abgerufenen Objekte, die sollten rufen Sie die Implementierung der Methode enthaltenen B-Implementierung
Ich habe dies ausprobiert, aber beim Aufruf der Methode, die ich erhalten:
[NSManagedObject methodName:]:
unrecognized selector geschickt Instanz
Ich nehme an, das ist, weil die Objekte zurückgegeben, die von executeFetchRequest:
sind proxy-Objekte von einigen Sortieren.
Gibt es eine Möglichkeit zu nutzen, Vererbung Verwendung von Unterklassen NSManagedObjects?
Ich würde wirklich gerne in der Lage sein, dies zu tun, sonst ist mein Modell code wäre verantwortlich für die Bestimmung, welche Art von NSManagedObject der Umgang mit und führen spezielle Logik, nach der Art, was unerwünscht ist.
Jede Hilfe ist willkommen, danke im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte es funktionieren. Die Objekte zurückgegeben, die von
executeFetchRequest:
sind echte InstanzenNSManagedObject
s (oder Unterklassen davon.)Die Schritte zum verwenden von benutzerdefinierten Klassen in CoreData sind wie folgt. Sagen Sie Entitäten A und B, wobei B erbt von A.
Dann müssen Sie zwei benutzerdefinierte Klassen als
Dann legen Sie Sie in der XCode-data modeler, wie gezeigt:
Diese Weise die CoreData-ordnet automatisch die richtige Klasse, um die
NSManagedObject
wenn es aus der Datenbank abgerufen.Wenn Sie, die Ausnahme, bedeutet es, Core Data ist nicht mit Ihrer benutzerdefinierten Klasse. Der Schlüssel hier ist
NSManagedObject
- das ist das Core-Objekt die Daten für die erstellten Objekte in Ihre Daten zu speichern.Wenn Sie nicht bereits haben, müssen Sie eine Klasse erstellen, erbt von
NSManagedObject
, fügen Sie Ihre benutzerdefinierten Methoden gibt es, und legen Sie dann die EntitätA
zur Verwendung Ihrer benutzerdefinierten Klasse in der Objekt-Modell-Werkzeug. Wenn UnternehmenB
,C
,D
usw. haben bestimmte Verhaltensweisen, sollten Sie eine Unterklasse der Klasse, die Sie erstellt für die EntitätA
und weisen Sie diese Personen zu verwenden, die Unterklassen zu.Im wesentlichen, Sie haben eine parallel-Hierarchie: eine Hierarchie von Entitäten, und eine der anderen Klassen. Sie werden wahrscheinlich am Ende mit entity
X
und KlasseX
für jede Entität in Ihr Objekt-Modell.Nach dem Versuch viele Lösung aufrufen isMemberOfClass auf meine NSManagedObject subclass, bevor Sie versuchen zu verwenden, meine eigene Methode gemacht, der trick.
Hatte ich die gleiche Fehlermeldung für die gleichen zugrunde liegenden Grund, aber es kam in eine andere situation und eine andere zu heilen. Ihr Vorschlag hat mir sehr geholfen!
Ursprünglich hatte ich meine Klasse Umsetzung meiner Eingabe per hand. Ich wusste nicht, es war ein Xcode-Menü für diese. Ich denke, der link war noch nie dort! Also es war nicht, bis ich aufgenommen hatte und begann die Tests mit der neuen benutzerdefinierten Methoden (keine setter/Getter), die ich angefangen habe um den Fehler zu erhalten.
Meine Lösung war, den Namen zu ändern von meiner Klasse, von Xcode neu erstellen der Klasse für meinen Eintrag über
Editor->Create NS Mangage Object....
Dann Ausschneiden und einfügen in den alten code in die neue Klasse. Kein Unterschied im code!Xcode scheint eine Art interner link nicht sichtbar in den code.