Frage

Ich versuche, Core Data zu einer bestehenden Anwendung hinzuzufügen, was nicht einfach ist, man bedenkt, dass alle Unterlagen und jedes Tutorial beginnt mit dem Erstellen einer Anwendung, die Kerndaten von Anfang an verwendet. Also ich versuche, eine bestehende Modellklasse zu konvertieren eine Kerndateneinheit zu sein. Hier ist, was ich getan habe:

  1. Fügen Sie die Kerndaten-Framework.
  2. Fügen Sie eine xcdatamodel Datei. Es zeigte mir einen Dialog, in dem ich eine vorhandene Klasse hinzufügen könnte, so fügte ich mein Modell. Dann zwickte ich die Attribute und gesagt, dass es, was die Typen waren.
  3. Anstatt eine neue Modellklasse zu erzeugen (da ich schon eine habe) habe ich ein Testprojekt, um zu sehen, wie es ist, aussehen würde und angepasst meine Klasse zu entsprechen. Dazu gehörte es zu vererben NSManagedObject, die Änderung meiner Eigenschaften dynamische Änderung Release Anrufe zu entfernen, etc.
  4. hinzugefügt die Core Data-Objekte meiner AppDelegate nach dieses Beispiel.
  5. In meinem Viewcontroller, wo ich mein Modell Alloc, habe ich es zu

    MyModel *model = (MyModel*)[NSEntityDescription insertNewObjectForEntityForName:@"MyModel"] inManagedObjectContext:[delegate managedObjectContext];
    

Beachten Sie, dass Delegat einen Verweis auf meine AppDelegate ist, erklärte zuvor. Vielleicht ist das nicht die intelligente Art und Weise, es zu tun.

Nachdem alle die Eigenschaften einstellen, die ich habe:

    [[delegate managedObjectContext] save:&error];

Diese Zeile stürzt, und ein Backtrace sagt, dass es innerhalb [NSSqlLiteConnection execute], etwa 8 Stufen im Inneren der Speicherfunktion. Die Ausnahme ist:

*-[NSConcreteValue UTF8String]: unrecognized selector sent to instance*

Was ist der konkrete Wert? Und warum ist dieses Wesen genannt, von wem? Wenn es darauf ankommt, mein Modell Erstellung / code Speicher ist in einer Funktion, die ein Rückruf für ein NSNotification ist. Ist das auf einem separaten Thread? Ich habe gehört, dass der managedObjectContext nicht sicher ist, fädelt. Aber ich bin nicht die gleichen Fehler in diesem Fall ich erwarten würde.

War es hilfreich?

Lösung

Nun, ich bin ziemlich sicher, dass Sie eine Eigenschaft haben erklärt, wie NSString auf dem Datenbankmodell (.xcdatamodel), die als etwas anderes erklärt wird (eine NSNumber vielleicht) auf dem Objektmodell. Wenn Sie Ihren Code kompilieren, werden keine Warnungen generiert, aber wenn Coredata die moc zu retten versucht (dh Daten über die persistenten Speicher zu schreiben, AKA Ihre SQLite-Datenbank)., Scheitert es bei Coredata versucht, Ihre vermeintlichen NSString zu UTF8-Codierung zu konvertieren

Sie sollten Ihre Eigenschaften sowohl auf das Datenbankmodell und Objektmodell doppelt überprüfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top