2016-12-14 7 views
4

Ich beobachtete ein Tutorial (https://www.youtube.com/watch?v=qt8BNhpEAok), um Core-Daten in Xcode 8 zu verwenden, und das Video verwendete Swift. Er trat ein Unternehmen namens Aufgabe im Datenmodell Kern und dann in dem Code, den er konnte Aufgabe nennen wie:Xcode 8 Wie verwende ich Core Data Code Gen-Klassen in Objective-C?

let task = Task(context: context) 

Ich habe ein Unternehmen „Tag“ genannt. Wie kann ich mithilfe von objective-c auf Tag in Code zugreifen? CodeGen wird im Kerndatenmodell festgelegt, aber in meinem Projekt werden keine zusätzlichen Dateien angezeigt. Wenn ich versuche

Tag test = [[Tag alloc] init]; 

Ich bekomme einen Fehler, dass Tag nicht existiert.

+0

Wenn Sie Ihre 'xcdatamodeld' Datei in Ihrem Projekt öffnen und Ihre„Tag“Entität wählen, was ist die Codegen Option, die ausgewählt wird? Wenn es auf "manual/none" gesetzt ist, werden die 'NSManagedObject'-Unterklassen nicht generiert, wenn Sie Ihr Projekt erstellen. –

+0

Wenn es auf "Klassendefinition" eingestellt ist, werden beim Erstellen des Projekts die Unterklassen 'NSManagedObject' generiert, die jedoch nicht in Ihrem Projekt angezeigt werden. –

+0

@RyanH. Es ist auf "Klassendefinition" eingestellt. Wenn ich im Projekt bin, wie kann ich darauf zugreifen? Ich habe in den Optionen den globalen Namespace ausgewählt, also dachte ich, ich könnte einfach Tag sagen und es als Klasse anzeigen lassen. Muss ich etwas in die Header-Datei importieren? – SolidSnake4444

Antwort

2
  1. Wählen Sie die Entität "Tag" im Modelleditor.

  2. Generieren Sie den Quellcode für Task, indem Sie den Menübaum 'Editor' -> 'Create NSManagedObject Subclass ...' auswählen und dann den Anweisungen folgen.

'Tag + CoreDataClass.h'

'Tag + CoreDataClass.m'

'Tag + CoreDataProperties.h'

'Tag + CoreDataProperties.m'

Dateien werden erstellt und automatisch an Ihr Projekt angehängt.

  1. Headerdatei importieren.

#import "Tag+CoreDataProperties.h"

  1. Then 'Tag' Klasse erstellen.

NSManagedObjectContext* wContext = ((AppDelegate*)UIApplication.sharedApplication.delegate).persistentContainer.viewContext; Tag* w Tag = [ [ Tag alloc ] initWithContext: wContext ]; wTag.name = @"TEST";

+0

Wird das Tag sofort in die Datenbank eingefügt? Die initWithContext-Zeile. – SolidSnake4444

+0

Ich endete nicht Schritt 2 zu tun. Die Magie, die ich brauchte, war Schritt 3, ich wusste nicht, dass die Klasse erstellt wurde. Ich vermute, Schritt 2 könnte es im Projekt erscheinen lassen. In Schritt 4 wurde das Tag in die Datenbank eingefügt, sodass alles so funktioniert, wie ich es mir vorgestellt habe. Vielen Dank. – SolidSnake4444

4

Wenn Codegen ist auf „Klassendefinition“ dann können Sie nur NSManagedObject Unterklasse Header-Datei Ihres Unternehmens importieren.

Import:

#import "Tag+CoreDataClass.h" 

Dann wird die Erstellung Ihrer Tag Objekt erkannt wird.

Tag *tag = [NSEntityDescription insertNewObjectForEntityForName:@"Tag" inManagedObjectContext:[self managedObjectContext]; 
tag.name = @"Tag Name"; 

Hinweis: Wenn Sie die Dateien sehen möchten, die in Ihrem Namen erstellt wurden, können Sie den DerivedData Ordner für Ihr Projekt überprüfen. Sie sollten diese Dateien nicht bearbeiten oder in Ihr Projekt importieren.

Etwas wie:

/Users/{Username}/Library/Developer/Xcode/DerivedData/{Your Project Name}/Build/Intermediates/{Your Project Name}.build/Debug-iphonesimulator/{Your Project Name}.build/DerivedSources/CoreDataGenerated/{Your Project Name}/

Es gibt andere Codegen Optionen, die verschiedene Optionen je nach Anwendungsfall bieten:

  • Keine/Manuell: Hier können Sie die NSManagedObject Subklassen selbst verwalten. Mit dieser Option werden die Dateien in Ihrem Projekt angezeigt und Sie können sie ändern.
  • Kategorie/Erweiterung: Ermöglicht benutzerdefinierte Eigenschaften (Attribute), die Core-Daten nicht verwalten sollen.

Ich stellte eine ausführlichere Antwort in Bezug auf Codegen Möglichkeiten: https://stackoverflow.com/a/40647786/4748172

Verwandte Themen