Dodawanie relacji w NSManagedObjectModel do programowo utworzonego NSEntityDescription

Kiedy piszesz statyczną bibliotekę korzystającą z CoreData, w projekcie jest duży bałagan, w tym zwykły plik .xdatamodeld, ponieważ po prostu nie możesz po prostu połączyć jego skompilowanej wersji (.momd) z plikiem binarnym, więc lepiej jest utworzyć całośćNSManagedObjectModel w kodzie takim jak ten:

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];

I wszystko jest po prostu idealne ....

Ale! Czekaj, jeśli mam więcej niż jedną istotę w moimNSManagedObjectModel i są one powiązane (do wielu, odwrócone itd.), jak w świecie podłączę je do kodu, jak w powyższym przykładzie, bez tego miłego edytora Xcode, gdzie tworzysz relacje z kilkoma kliknięciami myszy?

Przykład

Wyobraź sobie, że mamy klasę MyCustomElement, która jest prawie taka sama jak w MyCustomEntry z powyższego kodu. Oto ich interfejsy, które pojawią się, jeśli użyję generowania Xcode dla podmiotów:

@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

Co NSRelationshipDescription muszę utworzyć dla nich i jak ją zainicjować?

questionAnswers(1)

yourAnswerToTheQuestion