1

私は最近MagicalRecordをかなり使用していますが、これによりCore Dataの作業がはるかに簡単になり、高品質のライブラリとは何かという作者の功績が認められます。

とにかく、シナリオは、3つのコントローラーのナビゲーションコントローラースタックがあり、ここでは下から上にABCと呼ばれています。

  • ビューコントローラAは、エンティティに関する詳細(つまり、そのプロパティ)を入力するフォームです。
  • ビューコントローラBは、エンティティからの計算結果を表示します(たとえば、インスタンス関数を介して)。
  • 簡単にするために、View Controller Cは単なる確認であり、エンティティを保存したい場所です。

MagicalRecordに[MyEntity createEntity]、プロパティが設定されたView Controller Aを呼び出し、Bを介してCに渡し、Cにのみ保存する方法はありますか?これには、ユーザーがBまたはCからAに戻ることを決定した場合に、それをまったく保存しない可能性も含まれます。

Core Dataでスティックの端が間違っている可能性があり、それが不可能な可能性があることを十分に理解しています。回避策として、関連するパラメーターを指定して同じ計算を実行し、すべてのパラメーターをAからCまでスタックに渡すことができるクラスメソッドを作成できることはすでにわかっています。

編集:明確にするために、ViewControllerCを呼び出し[[NSManagedObjectContext defaultContext] save]ます。

4

2 に答える 2

1

いくつかのテストの後、私は@ Daij-Djanが、[[NSManagedObjectContext defaultContext] save]自分のエンティティを保存したくない場合は電話をかけないという正しい考えを持っていることを知りました。結果として、保存を行うためにViewControllerCまでその呼び出しを残します。

ただし、私のテストでは、不要なエンティティを保存しないようにするために、もう少し行う必要があることがわかりました。戻るボタンを使ってBからAに行くと、そこにあるエンティティを破棄したいことに気づきました。私のユースケースでは、AからBに移動する別の新しいエンティティを作成するかどうかは関係ありません。エンティティを正常に保存した場合、ViewControllerBをパスバックすることはありません。

したがって、基本的に、View Controller Bで戻るボタンが押された場合は、保存されていないエンティティを削除する必要があります。 この回答は、そこで大いに役立ち、ViewControllerBに次のコードが表示されます。

-(void) viewWillDisappear:(BOOL)animated {
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
        // self.entity is the instance of my entity

        [self.entity deleteEntity];
        self.entity = nil;
    }
    [super viewWillDisappear:animated];
}
于 2012-11-30T12:50:51.367 に答える
1

はい、確かに..managedContextを保存しないでください。

とにかく、VCはすべてメインスレッドで実行する必要があります。

[NSManagedObjectContext defaultContext]

また

コントローラのプロパティを使用して、3つのクラス間でMOCを渡します。

@property NSManagedObjectContext *context;
于 2012-11-29T22:48:17.440 に答える