2009-09-30 4 views
12

私は文書ベースではないCore Dataアプリケーションを開発中です。CocoaとCoreデータによる自動保存

変更が保存されることを希望します。これは、ユーザーがこのタイプのアプリケーションで期待するものです。 AppleがiPhotoまたはiTunesで実装したものでもあります。

ブルートフォースアプローチは、頻繁に保存するようにタイマーを設定することです。保存によってトリガーされたメソッドは、ユーザーを煩わさないようにすべての検証エラーを取り込みます。終了時にのみ、データを保存できるようにデータを整理するためにユーザーが盗聴されます。 IMHO、そのアプローチは悪臭を放つ。

私は考えています。何とか、NSEditorプロトコルのようなものに保存する方法があるはずです。ユーザー(またはコントローラー)がデータの編集を終了するたびに、アプリケーション代理人に何らかの方法でトリガーに保存操作が通知されます。私はどこを見るか分かりません。

いくつかのクロスバリデーションが必要なさらに複雑な操作では、専用のNSManagedObjectContextに接続されたインターフェイスのビットをユーザーに提示すると思います。

+0

既に元に戻す機能をサポートしている場合は、元に戻すスタックに何かを押すたびに元に戻します。 –

+0

私はまだアンドゥをサポートしていません。私はCoreDataが提供するものだけを使用します。しかし、あなたは拡張された元に戻すサポートのための強力なケースを作っています。 –

答えて

14

AppKitアプリの各イベントの最後に、CoreDataが-processPendingTransactionsを実行します。

この副作用の1つは、変更通知を受け取るためにNSManagedObjectContextに登録した場合、各イベントの最後に呼び出されることです。

たとえば、通知ハンドラでは、コンテキストを保存するように呼び出すことができます。

しかし、同じコンテキストからコールバックしている間にコンテキストを保存することについては、非常に面倒なので、performSelectorを実行した方が気分が良くなるでしょう。@selector(save :) afterDelay: -processPendingTransactionsが完了するまで保存します。

-save:セレクタで前回のキャンセルを実行しても、遅延が5秒になることもあります。そのため、ユーザーやアプリケーションが変更の集まりの途中にいる場合は、すべて1つにまとめられます。

実際、これはDelicious Library 1.0-1.09がどのように機能したかです。

-wil

+0

チップをありがとう。あなたの提案と、元に戻すマネージャーにピギーバックのアイデアの両方が優れているようです。 もちろん、あなたのコメントは質問をしてくれます:最近のバージョンのDelicious Libraryはもはやこのテクニックを使わないのですか? –

+0

私は一度に複数のスレッドで実行されているため、例えばメインスレッドでカバーを作成すると、本当にバックグラウンドのグラフィックススレッドのmanagedObjectContextsでカバーを表示する必要があるため、遅延の代わりにすぐに保存することにしましたすぐに、あなたが自動保存するときに3秒ではありません。 –

+0

だから、あなたはまだperformSelectorを呼び出しますか?@selector(save :) afterDelay:まったく、あるいはコンテキストを自動保存するために他の方法を使用していますか? –

関連する問題