コントローラ MyControllerは、ビュー(WorkView)とモデル(Item、CoreData)との間を取り持つ。
i. 起動時
プログラム起動時にCoreDataから Itemの配列を取り出して配列 _items へ格納する。
また同時に itemsフォルダ内の画像ファイルをそれぞれ Item.image へ格納していく。
WorkViewが itemsを元に画像を表示する。
- (void)awakeFromNib
{
_path_to_save = [[_app_delegate applicationSupportFolder] retain];
NSFileManager *file_manager = [NSFileManager defaultManager];
[file_manager createDirectoryAtPath:_path_to_save
attributes:nil];
NSManagedObjectContext *moc = [_app_delegate managedObjectContext];
NSEntityDescription *entity_descriptin = [NSEntityDescription entityForName:@"Item"
inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entity_descriptin];
NSError *error;
_items = [[moc executeFetchRequest:request error:&error] retain];
if (_items == nil) {
_items = [[NSMutableArray alloc] init];
}
[_items makeObjectsPerformSelector:@selector(willAccessValueForKey:) withObject:nil];
for (Item* item in _items) {
item.image = [[NSImage alloc]
initWithContentsOfFile:[_path_to_save stringByAppendingPathComponent:item.filename]];
}
}
画像がドラッグ&ドロップされた時、WorkViewが新しい imageを要求する(createItem)。これを受けてMyControllerでは、sp4_AppDelegateから NSManagedObjectContext を取得し、新しい image(NSManagedObject)を作成して返す。
-(Item*)createItem
{
Item *item = [NSEntityDescription insertNewObjectForEntityForName:@"Item"
inManagedObjectContext:[_app_delegate managedObjectContext]];
[_items addObject:item];
return item;
}
WorkViewはitemを使って画像を表示するが、その生成(と今後実装予定の削除など)については MyControllerが中を取り持つ形となる。