選択した画像を削除する。削除はDeleteキーで行う。
まずビューでキー入力をハンドリングする。
WorkView.m
- (BOOL)acceptsFirstResponder
{
return YES;
}
- (void)keyDown:(NSEvent *)theEvent
{
}
- (void)keyUp:(NSEvent *)theEvent
{
if ([theEvent keyCode] == 117 && _selected_item) {
[_controller deleteItem:_selected_item];
_selected_item = nil;
[self setNeedsDisplay:YES];
}
}
キーボード・イベントを取り扱う場合には acceptsFirstResponder をオーバライドし YESを返す(ヒレガス本参考)。
次にdeleteキーが押されたかを keyUp: で判定する。keyDown: で処理する場合は、押しっぱなしだと何度も呼び出されるので1回だけ呼出される keyUp:を使う。MyController#deleteItemを呼び出してモデルを削除した後、選択を解除し再描画する。
以下は MyController内でのモデル削除の処理コード。
MyController.m
-(void)deleteItem:(Item*)item
{
NSString *filepath = [_path_to_save stringByAppendingPathComponent:item.filename];
[_items removeObject:item]; // (1)
NSManagedObjectContext* moc = [_app_delegate managedObjectContext];
[moc deleteObject:item]; // (2)
NSFileManager *fm = [NSFileManager defaultManager];
[fm removeFileAtPath:filepath handler:nil]; // (3)
}
処理は3つ。(1)配列から削除、(2)CoreDataから削除、(3)画像ファイルの削除。
(本当はちゃんとエラー処理を入れてトランザクションを形成すべし)。