0

私は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のパラダイムから逸脱しているように見え、代わりにシングルトンパターンに傾いているからです。 (コントローラーは私の心の中のデータに責任を負うべきではありませんが、他のクラスに提供する責任を負いません)。

答えて

1

アプリケーションが起動/終了すると、 DataManagerがNSCodingプロトコルに準拠しているため、NSKeyedArchiver(およびUnarchiver)クラスを使用して、データをディスクから読み書きしてこのクラスのインスタンスを作成します。

私が抱えている問題の1つは、DataManagerが他の多くのIBクラスからアクセスできる必要があるということです。そのため、IBのオブジェクトとして定義されています。コンテキストを2度、つまりInterfaceBuilderでインスタンス化しないで、2回目のアプリケーションデリゲートでインスタンス化しないのですか?

まず、これがコントローラかモデルオブジェクトかを考える必要があります。それはコントローラのような私に聞こえる。

この場合は、モデルを別のオブジェクトに移動して、それらのNSCoding準拠のモデルを作成し、データマネージャにそれらのオブジェクトをロードして保存させる必要があります。このソリューションの利点は、終了時だけでなく、メモリ不足の警告を受け取ったときに、オブジェクトを保存してパージするようデータマネージャに指示できることです。

関連する問題