2009-08-07 10 views
0

私はEAGLViewクラスのクラス "A"のインスタンスを持っています。これはEAGLViewのinitWithCoderメソッドでインスタンス化されています。IBOutletがnilを取得する問題

このクラス「A」には、UIViewへのIBOutletが含まれています。

また、クラス「A」IBOutletを対応するビューに接続するために、このクラス「A」のインスタンスがInterface Builderにあります。

したがって、awakeFromNibメソッドのIBOutletが完全に動作しているInterface Builderによってクラス "A"が2回インスタンス化されています。しかし、これはEAGLViewによって再びインスタンス化されています。今回はUIViewに接続するコンセントは明らかにUIViewに接続されていないので、それはゼロです。

この問題を回避するには、設計の観点から何ができますか? 、私は本当にそれが十分明確であることを非常に明確にするように努めました。

答えて

2

EAGLViewのinitWithCoder:メソッドからクラス "A"をインスタンス化しないでください。 NIBローダーはすでにこのインスタンスを作成しています。もう一度作成してはいけません。 initWithCoder:に作成する必要があると思われる理由はありますか?

+0

別のインスタンスを作成する代わりに、NIBローダーによって作成されたインスタンスを使用する方法はありますか?そのクラスは、ユーザーが何らかのアクションを実行したときに、元のUIViewを変更したり、変更したりする必要があります。 – Goles

+0

NIBローダーが作成したインスタンスは、IBOutletに配線して使用します。 IBOutletを使用してNIBインスタンス化されたオブジェクトにアクセスできたとおっしゃいましたか? –

0

2回目のコードで "A"をインスタンス化する代わりに、EAGLViewクラスの "A"クラス用のIBOutletを作成し、Interface Builderで接続することをお勧めします。

+0

可能性はありますが、EAGLViewにはIBのプロキシインスタンスはありません。もしあれば、EAGLViewの複数のインスタンスを取得することになります。 (私のApplicationDelegateクラスでインスタンス化されています。 – Goles

関連する問題