9

Ich bin relativ gut mit CoreData vertraut und benutze es seit einigen Jahren mit wenig oder keinen Schwierigkeiten. Für das Leben von mir, ich kann nicht herausfinden, waruminsertNewObjectForEntityForName: inManagedObjectContext: NSNumber Fehler zurückgeben?

insertNewObjectForEntityForName:inManagedObjectContext: 

ganz plötzlich ist eine Art seltsamer Instanz NSNumber zurück. GDB sagt das zurückgegebene Objekt ist die richtigen benutzerdefinierte Unterklasse von NSManagedObject, aber wenn ich eine Beschreibung des NSManagedObject selbst zu drucken, ich die folgende Fehlermeldung erhalten:

*** -[NSCFNumber objectID]: unrecognized selector sent to instance 0x3f26f50 

Was ist noch seltsamer ist, dass ich in der Lage um einige Beziehungen und Attribute mit setValue zu setzen: forKey: und alles ist gut. Aber wenn ich versuche, eine bestimmte Beziehung zu setzen, bekomme ich diesen Fehler:

*** -[NSCFNumber entity]: unrecognized selector sent to instance 0x3f26f50 

ich alles von sauber alle Ziele versucht haben, zu einem Neustart Mac und iPhone, auch das Modell der Bearbeitung, so dass die Beziehung in Frage zu eins statt zu vielen. Egal was ich mache, das gleiche Problem erscheint. Hat jemand schon einmal so etwas gesehen?

+2

Bitte kollidieren, mehr Code liefern – Skie

+0

Haben Sie jemals diese Bezifferung am Ende heraus? – makdad

Antwort

0

Die Objekt-ID und Entitätsauswahl sind unter NSManagedObject, nicht NSCFNumber (oder NSNumber). Ich würde nicht erwarten, dass Sie einen dieser Selektoren auf einer NSNumber aufrufen, die eine Eigenschaft auf einer Entität sein sollte, nicht die Entität selbst.

Jede Entität in CoreData muss erweitern, so dass Ihr NSCFNumber Objekt keine Entität ist.

1

Ich lief genau das gleiche Problem und nach dem Ziehen meine Haare für einen ganzen Tag, löste ich mein Problem.

Ich glaube, das Problem hängt mit einem beschädigten Attribut/Beziehung zusammen, und die NSCFNumber sucht tatsächlich nach der Objekt-ID für dieses Attribut/Beziehung. In meinem Fall könnte ich valueForKey verwenden: um alle Attribute/Beziehungen zu finden, obwohl eine Beziehung, die ich "Datei" genannt hatte, korrupt zu sein schien.

Endlich erkannte ich, dass ich NSObject um eine boolesche "isFile" -Methode erweitert hatte, und irgendwie störte dies CoreData und führte dazu, dass es entweder ein beschädigtes Objekt zurückgab oder nicht richtig mit dem Objekt umgehen konnte . Ich vermute, dass CoreData dynamisch "isXXX" -Methoden erstellen muss.

Ich konnte entweder das Problem beheben, indem Sie die IsFile-Methode entfernen oder indem Sie meine Eigenschaft umbenennen.

14

Ich hatte das gleiche Problem: Ich hatte eine Methode namens "isDatabase" (eine BOOL) an die übergeordnete Entität meiner Datenbank-Entität, die eine Beziehung namens "Datenbank" hatte hinzugefügt. Durch das Umbenennen von "isDatabase" in "isOfTypeDatabase" wurde das Problem behoben. Schauen Sie also auch in die übergeordneten Entitäten!

+0

Sie haben mich gerade potentiell ** Stunden ** Frustration und Googeln gerettet. Wenn ich diese Antwort tausendmal abstimmen könnte. Danke mein Herr! – Russ

+0

OMG! Hatte das gleiche Problem, kann nicht "ist " sogar in einer Kategorie! Umbenannte meine Methode zu etwas anderem, das es repariert hat! Vielen Dank: D! – KBog

2

Ich definierte eine Eigenschaft in einer -Unterklasse, die mit dem Namen einer in der Klasse definierten Beziehung kollidierte.

Hier ist der Code in meinem MyManagedObjectSubclass+Custom.h

@property (readonly, nonatomic) BOOL isSeason;

Hier ist der Code von XCode für MyManagedObjectSubclass hergestellt.h

@property (nonatomic, retain) SomeOtherEntityToOneRelationship *season;

Beachten Sie, dass isSeason, von KVC, mit der Saison Name

Verwandte Themen