Quando si scrive una libreria statica che utilizza CoreData, c'è un grosso problema che include un normale file .xdatamodeld nel progetto perché non si può semplicemente collegare la sua versione compilata (.momd) nel proprio binario, quindi è meglio per creare l'intera NSManagedObjectModel
nel codice come questo:Aggiunta di relazioni in NSManagedObjectModel a NSEntityDescription creato a livello di programmazione
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 tutto è perfetto ....
Ma! Aspetta, se ho più di un'entità nel mio NSManagedObjectModel
e sono correlati (to-many, inversed, e così via), come nel mondo li collegherò nel codice, come nell'esempio sopra, senza quel simpatico editor Xcode , dove si fanno relazioni con diversi clic del mouse?
Esempio
Immaginate, abbiamo un MyCustomElement classe, che è quasi la stessa come nel MyCustomEntry dal codice di cui sopra. Ora, here're loro interfacce come apparirebbero se ho usato generazione Xcode per le entità:
@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
Cosa NSRelationshipDescription ho bisogno di creare per loro e come a init esso?
Si prega di controllare la domanda aggiornata con un esempio. – shoumikhin
@shoumikhin: Ho aggiunto codice di esempio alla mia risposta. –
Fantastico, grazie! – shoumikhin