Adicionando relacionamentos no NSManagedObjectModel para NSEntityDescription criado por programação
Quando você escreve uma biblioteca estática que usa CoreData, há uma grande confusão incluindo um arquivo normal .xdatamodeld no projeto, porque você simplesmente não pode simplesmente vincular sua versão compilada (.momd) ao seu binário, então é melhor criar o todoNSManagedObjectModel
no código como este:
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];
E tudo é perfeito ...
Mas! Espere, se eu tiver mais de uma entidade na minhaNSManagedObjectModel
e eles estão relacionados (para muitos, invertidos, e assim por diante), como no mundo eu vou conectá-los no código, como no exemplo acima, sem aquele editor Xcode legal, onde você faz relacionamentos com vários cliques do mouse?
Exemplo
Imagine, nós temos uma classe MyCustomElement, que é quase a mesma que em MyCustomEntry do código acima. Agora, aqui estão suas interfaces como elas apareceriam se eu usasse a geração do Xcode para entidades:
@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
O que NSRelationshipDescription eu preciso criar para eles e como iniciá-lo?