4

こんにちは、違いは何ですか

  [self.context refreshObject:site mergeChanges:YES];

  [self.context save:nil];

両方を使用することもあれば、 のみを使用することもありますsave。どちらの場合でも機能します。

4

1 に答える 1

8

-save:コンテキスト内の管理対象オブジェクトに加えた変更を保存します。これは、それらが永続ストア コーディネーターにフラッシュされ、永続ストア コーディネーターがそれらを永続ストアに書き込み、永続ストアがそれらをディスクに書き込むことを意味します (ディスク バックアップ ストアを想定)。

その一方で、-refreshObject:mergeChanges:まったく異なることを行います。オブジェクトの現在の状態を永続ストア コーディネーター (永続ストアから読み取るなど) から読み取ります渡すことは、オブジェクトへのローカルな変更をそのまま保持し、変更されていないフィールドのみを更新することYESを意味します。mergeChangesこれは とはほとんど反対です-save:

簡単な思考実験として、アプリを実行-save:してから終了しても、次回の起動時に変更されたデータは引き続き利用可能です。アプリを実行-refreshObject:mergeChanges:してから終了すると、ローカルでの変更はすべて失われます。

于 2013-03-15T22:39:34.050 に答える