ページ

2010年5月25日火曜日

CoreData - Xcodeでモデルクラスを自動生成する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Xcodeのモデルクラス自動生成機能を使った開発および運用方法など。

自動生成方法
モデルエディタでモデルを選択した後、メニューから「ファイル > 新規ファイル」を選ぶと管理クラスオブジェクトが選べるようになるのでこれを選択する。


生成されるクラス
下図のモデルのクラスを自動生成すると、関連(リレーションシップ)用のメソッドが追加される。



BlogEntry.h
@class Tag;
@class BlogComment;

@interface BlogEntry :  NSManagedObject  
{
}

@property (retain) NSDate * created;
@property (retain) NSString * title;
@property (retain) NSString * content;
@property (retain) NSSet* tags;
@property (retain) NSSet* comments;

@end

@interface BlogEntry (CoreDataGeneratedAccessors)
- (void)addTagsObject:(Tag *)value;
- (void)removeTagsObject:(Tag *)value;
- (void)addTags:(NSSet *)value;
- (void)removeTags:(NSSet *)value;

- (void)addCommentsObject:(BlogComment *)value;
- (void)removeCommentsObject:(BlogComment *)value;
- (void)addComments:(NSSet *)value;
- (void)removeComments:(NSSet *)value;

@end

BlogComment.h
@class BlogEntry;

@interface BlogComment :  NSManagedObject  
{
}

@property (retain) NSString * comment;
@property (retain) NSDate * created;
@property (retain) BlogEntry * entry;

@end

Tag.h
@class BlogEntry;

@interface Tag :  NSManagedObject  
{
}

@property (retain) NSString * name;
@property (retain) NSSet* entries;

@end

@interface Tag (CoreDataGeneratedAccessors)
- (void)addEntriesObject:(BlogEntry *)value;
- (void)removeEntriesObject:(BlogEntry *)value;
- (void)addEntries:(NSSet *)value;
- (void)removeEntries:(NSSet *)value;

@end


モデル変更時の対応
モデルの変更は、開発中のみならずシステム(アプリ)の運用・保守中にも必ず起こる。独自メソッドを自動生成クラスへ追加すると、その度にコードを追加しなければならなくなるので、これを避ける為にカテゴリを使う。

BlogEntryExtension.h

@interface BlogEntry (Extension) 
- (NSArray*)findAll;
@end






自動生成の自動化
mogenerator というソフトが公開されている。
nvie.com » Blog Archive » Automatically generate classes for your Core Data data model

これは未検証だが、使える内容ならビルドフェーズに組み込むと便利かもしれない。