[NSManagedObject sayHello]: unrecognized selector geschickt Instanz 0x
Ich versuche, Sie zu verlängern NSManagedObject.
Mit XCode erstellte ich MyBox.m und MyBox.h (direkt aus der xcdatamodel-Datei).
Dann modifizierte ich diese Dateien:
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface MyBox : NSManagedObject
@property (nonatomic, retain) NSDate * endDate;
@property (nonatomic, retain) NSNumber * globalId;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSDate * startDate;
-(NSString *)sayHello;
@end
und
#import "MyBox.h"
@implementation MyBox
@dynamic endDate;
@dynamic globalId;
@dynamic name;
@dynamic startDate;
-(NSString *)sayHello {
return @"hello";
}
@end
Kann ich abrufen aller myBoxes
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"MyBox" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSMutableArray *myBoxes = [context executeFetchRequest:fetchRequest error:&error];
aber später rufe ich
MyBox *myBox = [myBoxes objectAtIndex:indexPath.row];
[myBox sayHello];
es kompiliert, aber dann bekomme ich
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSManagedObject sayHello]: unrecognized selector sent to instance 0x8e73fc0'
Wenn ich nur Lesen einen Wert wie
NSLog(@"%@", myBox.name);
funktioniert es
Fand ich ähnliche Probleme, aber keine Lösung.
Vielen Dank für Ihre Hilfe.
- Sie haben wahrscheinlich vergessen zu setzen, die Klasse der Entität, auf
MyBox
am coredata-editor. - Ich habe das Entity->Name = Entity-> " Class = "MyBox" in die coredata-editor. Muss ich für einige andere Eigenschaften?
- Hmm, dass ist merkwürdig. Nein, dass sollte genug sein... haben Sie mehrere Versionen vielleicht?
- Ich Stimme mit Alladinian. Wenn der entity-Klasse ist auf MyBox dann sollte das klappen. Aber die Fehlermeldung besagt eindeutig, dass
myBox
ist nur ein NSManagedObject. Vielleicht NSLog dermyBoxes
array direkt nach dem abrufen und überprüfen Sie die Klasse. - Haben Sie versucht, zu reinigen in Xcode? Probleme mit Kern-Daten-Modell-Cache auf einer bestimmten Ebene sind oft gelöst, nur durch die Reinigung.
- Versuchen
NSLog(@"%@", NSStringFromClass([myBox class]))
in der Funktion, wo Sie versuchen, zu nennensayHello
um herauszufinden, welche Art von ObjektmyBox
eigentlich ist. - Ist die Klasse mit der Methode, die Anrufe
[myBox sayHello]
im selben Projekt wie die Core-Daten-Klassen? - Das war das Problem, ChrisH, die Klasse war im richtigen Ordner, aber nicht am Projekt teilnehmen... ich bin neu in XCode Hinzugefügt und die Datei der falsche Weg. Danke!!!
- Ich habe ein rename Refactoring der Klasse und, die die entity-Klasse-Feld in der core-data-editor geleert werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gerade das gleiche Problem. Gelöst wird es durch eine änderung der Klasse Namen, den Namen meines NSManagedObject subclass in
myApp.xcdatamodeld -> configurations -> default -> entities -> myEntity
.Vorausgesetzt, Sie haben legen Sie den Namen der Klasse richtig auf die
MyBox
Person, ich würde vermuten, dass die app hat eine ältere version der Core-Daten, managed-object-Modell. Reinigen Sie Ihre erstellen und löschen der app auf dem simulator/Gerät für eine gute Maßnahme. Zu 100% sicher sein, löschen Sie auch Ihre abgeleiteten Daten-Ordner.Wenn es nicht funktioniert, nach, dass, ich Wette, dass Sie noch nicht legen Sie die entity-Klasse-name korrekt. Drucken Sie Ihre
NSEntityDescription
und stellen Sie sicher, es ist das, was Sie erwarten.Hatte ich die richtigen Klassennamen gesetzt, in xcdatamodeld, aber ich hatte nicht die Klasse .m-Datei in mein Ziel. Ich hatte auf klicken Sie auf .m auf der linken Seitenleiste, dann überprüfen Sie das entsprechende Kontrollkästchen auf der rechten Seitenleiste unter Ziel-Mitgliedschaft.
Falsch Xcdatamodel.
Hatte ich die falsche xcdatamodel. Es ist eine super dumme Fehler, aber wenn man davon ausgeht das neueste Modell ist 27 aber Ihr Kollege änderte er 28 und Sie Ihren Eigenschaften zu modellieren, 27, es geschieht.Sie bekommen diese Art von Fehler und Sie davon ausgehen, es ist etwas falsch mit Ihrem Kern-Daten-Modell, aber es ist einfach Ihre xcdatamodel-Nummer.
Gotta love Programmierung =_=.