25

iOS 6 State Restoration を、完成間近のアプリに追加しようとしています。モデルの大部分が CoreData から取得されるアプリです。

推奨されるように、ビュー コントローラー間で管理オブジェクト コンテキストを移動するために「バトンを渡す」アプローチを使用しています。アプリ デリゲートで MOC を作成し、それを最初のビュー コントローラーに渡します。これは、それを prepareForSegue: などの 3 番目に渡します。

これは、State Restoration とうまく調和していないようです。私が考えられる唯一のことは、viewControllerWithRestorationIdentifierPath:coder: の実装で、App Delegate から MOC を直接取得することです。実際、Apple の開発者は、WWDC セッションを見ているときに、似たようなことをしたようです。

これが最良/唯一の方法ですか?状態の復元は、少なくとも復元されたView Controllerの場合、Pass-The-Batonを効果的に壊しますか?

4

6 に答える 6

3

これを処理する最善の方法は、MOC を次のようにエンコードすることだと思います。

- (void)encodeRestorableStateWithCoder:(NSCoder *)coder

次に、次の方法で復元されたときにデコードします。

- (void)decodeRestorableStateWithCoder:(NSCoder *)coder

これにより、状態の復元間でバトン アプローチを渡す必要があります。

このアプローチを使用する場合は、MOC を使用するすべての VC がこれを実装する必要があることに注意してください。

少し拡張するには、+ (UIViewController *)viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents coder:(NSCoder *)coderメソッドを使用して VC を初期化し、MOC を上記のメソッドでデコードして、すべての設定を行う必要があります。

これにより、復元時に復元したい情報をエンコードおよびデコードするのに十分な情報が得られるはずです。

于 2015-05-05T14:12:31.930 に答える
2

状態の復元についてはあまり行っていませんが、次のように考えています。

  • アプリ デリゲートが最初に起動されますか? アプリ デリゲートがビュー コントローラーを操作する機会はありますか?

  • AppDelegate がコンテキストを与えるのを待っている間、View Controllerを一時停止できますか?

状態の復元は特殊なケースのように思えます、データを要求する前に MOC が表示されるのを待つのに十分なほどビュー コントローラーをスマートにするオプションを検討します。おそらく、View Controller にロールバック状態があり、View Controller がコンテキストを待機できる場所に戻ることさえあります。

于 2014-01-14T19:02:19.123 に答える
-2

これに対する私の解決策は、View Controller をデフォルトでグローバル共有 MOC を使用するようにすることでした。ほとんどの場合、このコンテキストは意図したものであり、他の MOC を渡す必要がある場合は、完全にそうすることができます。

このアプローチは、Apple の「バトンを渡す」アプローチを確認するだけでなく、便利であり、状態の復元と互換性があります。

于 2014-04-30T09:43:05.063 に答える
-2

NSScreencastから Core Data スタックをセットアップする非常にクリーンな方法を学びました。基本的に、「Use Core Data」オプションを選択せず​​に Xcode プロジェクトを開始します。次に、データ モデルであるシングルトン クラスを追加します。したがって、メインの MOC を取得するには、[[DataModel sharedModel] mainContext]. App Delegate にすべてをダンプするほうがずっときれいだと思います。

私はこのように使用したことはありませんが、あなたの場合、View Controllerでこれを行うこともできると思います:

-(NSManagedObjectContext*)moc
{ 
    if (_moc != nil) return _moc;
    _moc = [[DataModel sharedModel] mainContext];
    return _moc;
}
于 2013-11-08T19:32:03.847 に答える