3

私は iOS の初心者で、現在、アプリの「新しいイベントの作成」ページを設計しています。

いくつかの情報:

  1. ユーザーは [新しいイベントの作成] をクリックし、[戻る] をクリックしてこの新しいイベントの作成をキャンセルできます。(私は UINavigationController を使用しています)
  2. 1 つのビデオを特定のイベントに添付できます。
  3. ユーザーは新しいイベントを作成し、ビデオを録画してから、保存を続行しないことを決定できます ([戻る] を押す)。
  4. 各イベントは uuid を生成する必要があります。この uuid は、イベントを作成してサーバーに送信する異なるクライアント間のエンティティの衝突を防ぐために必要です。
  5. キャプチャされた各ビデオには、イベントがサーバーにアップロードされる前にファイル システムに保存するためのuuid .mov という名前が付けられます。

レールのバックグラウンドから来て、私は次のことをすることに慣れています:

  1. ユーザーが [Create new event page] をクリックすると、イベントが作成されますが、データベースには保存されません。
  2. 次に、ユーザーはページに属性を入力し、コミットするかどうかを決定します
  3. コミットが発生すると、イベントは提供された情報に関連付けられます。その後、イベントが保存されます。

ただし、Core Data には、開発者がエンティティを保存せずに作成できる API があるとは思えません。現在、私は次のようなことをしています:

  1. ユーザーが「新規イベント作成ページ」にアクセスすると、空のオブジェクトが作成され、データベースに保存されます。イベント インスタンスへの参照は、新しいイベント ページの作成のコントローラに渡されます。
  2. ユーザーがすべての情報を入力してビデオを撮影すると (uuid は awakeFromInsert で作成され、1 で設定されます)、保存は必要な属性を持つエンティティを設定するだけです。
  3. ユーザーがイベントの作成をキャンセルすることにした場合、キャンセルが押されたかどうかを確認しています。その場合、イベントとビデオ ファイルの両方が削除されます。

キャンセルが押されたかどうかを確認するコード。

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    if (![[self.navigationController viewControllers] containsObject:self]) {

これは正直言って少し複雑です。皆さん、より良い提案はありますか?

4

1 に答える 1

3

Railsの動作について説明したように、実際には動作します。新しいオブジェクトは、(NSManagedObjectContextsave:メソッドを介して)コミットするまで永続ストアに保存されません。

『 Core Dataプログラミングガイド』「管理対象オブジェクトの作成と削除」セクションを参照してください。抜粋...

管理対象オブジェクトを作成するだけでは、永続ストアに保存されません。管理対象オブジェクトのコンテキストは、スクラッチパッドとして機能します。オブジェクトを作成して登録したり、オブジェクトに変更を加えたり、必要に応じて変更を元に戻したりやり直したりできます。特定のコンテキストに関連付けられた管理対象オブジェクトに変更を加えた場合、コンテキストにsave:メッセージを送信して変更をコミットするまで、それらの変更はそのコンテキストに対してローカルのままです。その時点で(検証エラーがない場合)、変更はストアにコミットされます。

于 2012-06-10T07:42:19.913 に答える