[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 der myBoxes 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 nennen sayHello um herauszufinden, welche Art von Objekt myBox 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.

InformationsquelleAutor stefanr | 2013-07-09
Schreibe einen Kommentar