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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage