ユーザーが UINavigationController の [戻る] または [完了] をクリックして新しいイベントを作成できる [新しいイベントの作成] ページがあります。どちらもその後同じページにつながります。
ユーザーが「完了」を押すと、コントローラーに保持されている現在のオブジェクトが saveChanges によって保存されます。ただし、ユーザーが編集中でもこれを放棄することにした場合は、このイベントの存続期間中にこのユーザーによって生成された静的ファイルをクリーンアップする必要があります。
私の唯一の問題は、ユーザーと「完了」または「キャンセル」を区別する方法がないことです。
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// If user has left this page by either pressing 'Done' or 'Cancel'
if (![[self.navigationController viewControllers] containsObject:self]) {
// If this event is NOT saved aka 'Cancel' is pressed.
if (![event isUpdated]) {
// It is important that we only delete videos associated when isNew.
if (isNew) {
NSURL *url = [self getMovieUrl:event.uuid];
[self deleteMovieByUrlIfExists:url];
}
self.event = nil;
}
}
}
- (IBAction)done:(id)sender {
[self.view endEditing:YES];
if (isNew) {
event.eventType = eventTypeInput.text;
event.targetId= [NSNumber numberWithInt:[targetIdInput.text intValue]];
event.game = game;
BOOL success = [[DataStore singletonInstance] saveChanges];
if(success) {
NSLog(@"Success: Event %@ saved. hasVideo:%d", event.uuid, [event.hasVideo intValue]);
// TODO [newEvent upload];
// Also upload the video if possible.
}
}
[self.navigationController popViewControllerAnimated:YES];
}
上記のコードは機能しません。ユーザーが「完了」を押すと、deleteMovieByUrlIfExists:url が引き続き呼び出されます。誰でも理由を知っていますか?
====== これが isNew の設定方法です。
- (void)initWithEvent:(id)sender event:(Event *)ev {
isNew = !ev;
if (isNew) {
event = [[DataStore singletonInstance] createEvent];
} else {
event = ev;
}
}