2009-08-14 15 views
2

Diese Frage hat etwas mit der Frage zu tun, die ich hier gepostet habe: Iphone Core Data crashing on Save aber der Fehler ist anders, also mache ich eine neue Frage. Jetzt bekomme ich diesen Fehler, wenn sie versuchen neue Objekte in meine managedObjectContext einzufügen:Iphone Core Data Interne Inkonsistenz

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: '"MailMessage" is not a subclass of NSManagedObject.' 

Aber klar ist:

@interface MailMessage : NSManagedObject { .... 

Und wenn ich diesen Code ausführen:

NSManagedObjectModel *managedObjectModel = [[self.managedObjectContext 
    persistentStoreCoordinator] managedObjectModel]; 

NSEntityDescription *entity =[[managedObjectModel entitiesByName] 
    objectForKey:@"MailMessage"]; 

NSManagedObject *newObject = [[NSManagedObject alloc] initWithEntity:entity 
    insertIntoManagedObjectContext:self.managedObjectContext]; 

Es läuft in Ordnung, wenn ich keinen MFMailComposeViewController präsentiere, aber wenn ich diesen Code in der

- (void)mailComposeController:(MFMailComposeViewController*)controller 
    didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { 
ausführen

Methode, es löst den obigen Fehler beim Erstellen der newObject-Variable. Das Entitätsobjekt wenn ich Druckobjekt verwenden erzeugt folgendes:

(<NSEntityDescription: 0x1202e0>) name MailMessage, managedObjectClassName MailMessage, 
    renamingIdentifier MailMessage, isAbstract 0, superentity name (null), properties { 

in beiden Fällen, so dass ich glaube nicht, das managedObjectContext vollständig ungültig ist. Ich habe keine Ahnung, warum MailMessage zu diesem Zeitpunkt keine Unterklasse von NSManagedObject ist und nicht die andere.

Jede Hilfe wäre willkommen, danke im Voraus.

Antwort

0

Ich konnte dies umgehen, indem Sie das MailMessage-Objekt erstellen, bevor Sie den Modalansicht-Controller präsentieren. Sobald das MailMessage-Objekt bereits erstellt wurde, war das Speichern von Änderungen kein Problem. Eine seltsame Problemumgehung und nicht das eigentliche Problem, soweit ich weiß, aber es funktioniert.

0

Versuchen Sie, den Simulator neu zu starten oder die Anwendung von Ihrem Gerät zu deinstallieren. Oft hat die NSInternalInconsistencyException mit Problemen mit der Änderung des Datenmodells zu tun und die Datenbank wird nicht entsprechend aktualisiert.

+0

Ich habe versucht, dass :(immer noch gleichen Fehler. – kiyoshi

10

Klasse MailMessage könnte in einer Bibliothek oder anderswo im Framework implementiert werden. Da Objective C Namespaces nicht implementiert, wird einer der beiden verwendet. Welches ist undefiniert. Versuchen Sie, Ihrer Klasse einen anderen Namen zu geben, um das Problem schnell zu lösen.

+0

Ich hätte nie darüber nachgedacht ..... alles richtig geregelt ... :) Vielen Dank! : D Obwohl ich zugeben muss, war der neue xCode 4 wirklich nervig, wenn es darum ging, den Namen zu ändern ... ich musste eine neue Entität erstellen und alle Attribute/Verbindungen kopieren ... /: –

+5

Tausend Dank. Ich steckte den ganzen Tag in dem Problem fest. Ich habe eine Entität "Account" verwendet, ... bekomme immer den Fehler. Ich habe es behoben, indem ich es in "XXXAccount" ändere. –

4

Suchen Sie eine solche Meldung vom Debugger. Es wird bestätigen, was Benjamin sagt.

Die Klasse MailMesssage ist sowohl in /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/PrivateFrameworks/Message.framework/Message als auch in /Users/home/Library/Application Support/iPhone Simulator/4.2/Applications/FFFFFFFF-FFFF-0000-0000-AAAAAAAAAAA/Projects.app/Projects implementiert. Einer der beiden wird verwendet. Welches ist undefiniert.

+0

habe es nicht selbst versucht, aber wenn es so ist, verdient es einen Daumen hoch ... :) –

Verwandte Themen