CoreDataを使用する静的ライブラリを作成すると、コンパイル済みのバージョン(.momd)をバイナリにリンクすることはできないため、通常の.xdatamodeldファイルをプロジェクトに含めてしまうと、NSManagedObjectModelで関係を追加してプログラムで作成したNSEntityDescription
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
を作成する方が良いでしょう!私のNSManagedObjectModel
に複数のエンティティがあり、それらが関連している(多対多など)場合は、上の例のようにコードでそれらを接続する方法を、素晴らしいXcodeエディタいくつかのマウスクリックでリレーションシップを作りますか?
は想像の例では、我々は上記のコードからMyCustomEntryとほぼ同じであるクラスMyCustomElementを、持っています。さて、here're私は、エンティティのための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
?
更新された質問を例で確認してください。 – shoumikhin
@shoumikhin:答えにサンプルコードを追加しました。 –
素晴らしい、ありがとう! – shoumikhin