2011-07-19 14 views
0

私にこの1つを付ける。iPhoneアプリケーションエラーの問題

私はiphoneアプリケーションを持っています。これはアンケートのアプリケーションです。いくつかのタイプの質問があります。いくつかはスライダを持ち、いくつかにはテキスト入力などがあります。私はそれぞれのタイプの質問に対してView Controllerを開発しました。

質問コントローラの2つのタイプの例は、TextInputQuestionViewControllerとSliderQuestionViewControllerです。

私はQuestionnaireViewControllerという名前のrootViewcontrollerを持っています。これは次のように定義されます。

上記の問題のある行は、switchViews関数内にあります。私はその質問表示(スライダ値、テキスト入力値)の特定の入力コンポーネントに等しい答えをする必要があります。ですから、currQをどのView Controllerを使ってもインスタンス化できる型にする必要があります。

したがって、現在の質問を保持するための汎用変数が必要です。 currQは現在の質問を保持しますが、現時点ではSliderQuestionViewController型です。私はこれをidに変更しようとしましたが、 "要求のメンバーは...構造体の構造体ではありません"という負荷と、割り当てられていないポインタの問題が発生します。

もっとコードが必要な場合は教えてください。

+0

[Objective Cの一般的な種類]の可能な複製(http://stackoverflow.com/questions/6740873/generic-type-in​​-objective-c) –

答えて

0

これは、UIViewControllerのポインタが必要なので、タイプとして使用します。それで、後で好きなサブクラスにキャストすることができます。例えば:あなたのケースでは

-(void)myAction:(UIViewController *)vc { 
    SpecialViewController *svc = (SpecialViewController *)vc; 
    ... 
} 

UIViewController* currQ; 

を宣言し、必要に応じて、あなたの2つのサブクラスの異なるプロパティとメソッドにアクセスするには、実装でそれをキャスト。

+0

私はこれを行い、それは要求の負荷を引き起こした...上記のようなエラー(switchViewメソッド内)。カスタムビューコントローラではなくUIViewControllerのメンバーにアクセスしようとしているようです... currQを間違って指定していますか(currQ = [questionArray objectAtIndex:index];) – user559142

0

「汎用」変数をお探しの場合は、idを使用することができます。タイプをid*と定義していないことを確認してください。アスタリスクはではなく、である必要があります。

しかし、より良いアイデアは、あなたの質問のViewControllerのスーパークラスを作成することです。 QuestionViewControllerというスーパークラスを作成し、UIViewControllerから継承し、SliderとTextInput(およびその他のもの)をQuestionViewControllerから継承します。変数を次のように定義することができます。QuestionViewController* currQ;スーパークラスに共通の機能を追加して、重複を排除できます。