Hinzufügen von Beziehungen in NSManagedObjectModel zu programmgesteuert erstellter NSEntityDescription
Wenn Sie eine statische Bibliothek schreiben, die CoreData verwendet, gibt es ein großes Durcheinander, das eine normale .xdatamodeld-Datei in das Projekt einbezieht, da Sie die kompilierte Version (.momd) einfach nicht einfach mit Ihrer Binärdatei verknüpfen können. Daher ist es besser, das Ganze zu erstellenNSManagedObjectModel
im code wie folgt:
NSAttributeDescription *dateAttribute = NSAttributeDescription.new;
dateAttribute.name = @"timestamp";
dateAttribute.attributeType = NSDoubleAttributeType;
dateAttribute.optional = NO;
dateAttribute.indexed = YES;
NSAttributeDescription *payloadAttribute = NSAttributeDescription.new;
payloadAttribute.name = @"payload";
payloadAttribute.attributeType = NSBinaryDataAttributeType;
payloadAttribute.optional = NO;
payloadAttribute.indexed = NO;
NSEntityDescription *entry = NSEntityDescription.new;
entry.name = entry.managedObjectClassName = NSStringFromClass(MyCustomEntry.class);
entry.properties = @[dateAttribute, payloadAttribute];
NSManagedObjectModel *mom = NSManagedObjectModel.new;
mom.entities = @[entry];
Und alles ist einfach perfekt ....
Aber! Warten Sie, wenn ich mehr als ein Objekt in meiner Datenbank habeNSManagedObjectModel
und sie sind verwandt (mit vielen, inversen und so weiter), wie um alles in der Welt werde ich sie im Code verbinden, wie im obigen Beispiel, ohne diesen netten Xcode-Editor, in dem Sie Beziehungen mit mehreren Mausklicks herstellen?
Beispiel
Stellen Sie sich vor, wir haben eine Klasse MyCustomElement, die fast mit der Klasse MyCustomEntry aus dem obigen Code identisch ist. Nun, hier sind ihre Oberflächen, wie sie aussehen würden, wenn ich die Xcode-Generierung für Entitäten verwenden würde:
@interface MyCustomEntry : NSManagedObject
@property (nonatomic, retain) NSNumber *timestamp;
@property (nonatomic, retain) NSData *payload;
@property (nonatomic, retain) MyCustomElement *element;
@end
@interface MyCustomElement : NSManagedObject
@property (nonatomic, retain) NSNumber * timestamp;
@property (nonatomic, retain) NSString * identifier;
@property (nonatomic, retain) NSSet *entries;
@end
@interface MyCustomElement (CoreDataGeneratedAccessors)
- (void)addEntriesObject:(MyCustomEntry *)value;
- (void)removeEntriesObject:(MyCustomEntry *)value;
- (void)addEntries:(NSSet *)values;
- (void)removeEntries:(NSSet *)values;
@end
Welche NSRelationshipDescription muss ich für sie erstellen und wie kann ich sie starten?