私はiPhone向けに開発していますが、アプリケーションデータを維持するために使用されるクラスDataManager
があります。アプリケーションが起動/終了すると、DataManagerがNSCodingプロトコルに準拠しているため、NSKeyedArchiver(およびUnarchiver)クラスを使用して、このクラスのインスタンスを作成するためにデータがディスクに読み書きされます。オブジェクトのInterface Builderインスタンス化をオーバーライドしますか?
私が気付いている問題の1つは、DataManagerが他の多くのIBクラスからアクセスできるようにする必要があることです。そのため、IBのオブジェクトとして定義されていて、それらのクラスにはアウトレットがあります。 DataManagerは標準のinit:メソッド(またはinitWithCoder :?)を使用して作成されていますが、IBはオブジェクトをインスタンス化するための適切なファイル(またはNSData)を持たないため、初期の内容はありません。
したがって、には、にはクラスを自動的にインスタンス化するように指示する方法はありますか?あなたが見ることができるように、これは問題を提示し
AppDelegate.h
IBOutlet DataContext *context;
AppDelegate.m
context = [NSKeyedUnarchiver unarchiveObjectWithData:dataLoadedFromFile];
:これは代わりに、自分のアプリケーションのデリゲートを使用してのようなものが実行されます。コンテキストを2度、つまりInterfaceBuilderでインスタンス化しないで、2回目のアプリケーションデリゲートでインスタンス化しないのですか?
デリゲートでivarとしてコンテキストを維持しないようにしたいと思います。これはMVCのパラダイムから逸脱しているように見え、代わりにシングルトンパターンに傾いているからです。 (コントローラーは私の心の中のデータに責任を負うべきではありませんが、他のクラスに提供する責任を負いません)。