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ć?