CoreData を使用する静的ライブラリを作成すると、通常の .xdatamodeld ファイルをプロジェクトに含めて大きな混乱が生じます。これは、コンパイルされたバージョン (.momd) をバイナリにリンクすることはできないため、次のNSManagedObjectModel
ようなコードで全体を作成することをお勧めします。これ:
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];
そして、すべてが完璧です....
しかし!私の中に複数のエンティティがNSManagedObjectModel
あり、それらが関連している場合(対多、逆など)、上記の例のように、コードでそれらをどのように接続するのか、素晴らしいXcodeエディターなしで、マウスを数回クリックして関係を構築する場所はどこですか?
例
上記のコードの MyCustomEntry とほぼ同じクラス MyCustomElement があるとします。次に、エンティティに Xcode 生成を使用した場合にどのように表示されるかを示すインターフェイスを次に示します。
@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
それらのために作成する必要がある NSRelationshipDescription と、それを初期化する方法は何ですか?