23 Stimmen

Warum kann ich "description" nicht als Attributnamen für eine Core Data Entität verwenden?

Ich habe eine einfache Core Data-Entität, die ein String-Attribut namens "description" hatte. Das Programm stürzt ab, wenn es auf den folgenden Code stößt:

valueForKey:@"description"

Ich habe das "description"-Attribut in "text" geändert und das Problem gelöst.

Warum passiert das?

Ist "description" ein reserviertes Schlüsselwort in Core Data?

Hängt es damit zusammen, dass die description-Methode von NSObject aufgerufen wird?

Gibt es eine Referenz zu diesen reservierten Schlüsselwörtern, falls sie existieren?

27voto

Weil es mit der Methode -description in NSObject in Konflikt steht (denken Sie daran, dass Core Data Eigenschaftszugriffs- und Manipulationsmethoden dynamisch generiert - eine Eigenschaft mit dem Namen 'description' würde bedeuten, dass eine Zugriffsmethode namens -description erstellt werden müsste). Dies ist im Core Data Programmierhandbuch und im NSPropertyDescription Klassenreferenz dokumentiert:

Beachten Sie, dass der Name einer Eigenschaft nicht mit dem Namen einer no-parameter Methode von NSObject oder NSManagedObject übereinstimmen kann. Sie können beispielsweise einer Eigenschaft nicht den Namen "description" geben. Es gibt Hunderte von Methoden auf NSObject, die mit Eigenschaftsnamen in Konflikt stehen können - und diese Liste kann sich ohne Warnung von Frameworks oder anderen Bibliotheken ändern. Sie sollten sehr allgemeine Wörter (wie "font" und "color") und Wörter oder Phrasen, die mit Cocoa-Paradigmen überlappen (wie "isEditing und "objectSpecifier"), vermeiden.

4voto

Kenny Wyland Punkte 19841

Beschreibung ist kein reserviertes Schlüsselwort in CoreData, sondern eine Eigenschaft aller Objective-C-Objekte von Natur aus. Es gehört zur NSObject-Klasse.

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/description

0voto

Barry Wark Punkte 106328

Ich vermute (obwohl ich nicht sicher bin), dass das Problem die Laufzeitzugriffsgenerierung von Core Data ist. Core Data synthetisiert Zugriffe (und Setter) für Attribute zur Laufzeit und fügt diese Zugriffe der entsprechenden Klasse hinzu (wiederum zur Laufzeit). Wenn Core Data eine neue description-Methode erstellt, die -[NSObject description] überschreibt und Transaktionslogik usw. in die Methode einfügt, dann könnte jeder Code, der -[NSObject description] aufruft, sich "schlecht" verhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X