2009-04-24 3 views
1

XIBファイルにUIImageViewを持つMyViewControllerというUIViewControllerクラスを作成しました。このクラスを別のクラスにインポートします。クラスのインスタンスを作成し、コードを使用してUIImageViewで画像を変更します。Cocoa Touchで変数の割り当てを使用してクラス階層をトラバースする方法は?

これはうまく動作します。私のアプリは基本的に画像ビューアです。サブビューに画像をプリロードすることで、次の画像と前の画像をキャッシュしたかったのです。私はこのような変数にmyViewController置くと:

UIViewController *pager = myViewController; 

そして、このようなUIImageViewのために画像を設定する変数を使用しようとする:

pager.myImageView.image = [UIImage imageNamed:@"myImage.png"]; 

私は「エラーが表示されます。メンバーの要求を " myImageView '構造体または共用体ではありません。私は角括弧を使用してそれをやってみました:

[[[pager myImageView] setImage:[UIImage imageNamed:@"myImage.png"]]; 

私は「警告 『のUIViewController』が 『-myImageView』に応答しないこと」を取得します。 myImageViewにアクセスするために階層にアクセスするにはどうすればよいですか?私はヘッダーと@importに@classを使用して、クラスインスタンスを合成しました。私が持っている変数の量を倍増

UIImageView *pager = myViewController.myImageView; 
pager.image = [UIImage imageNamed:@"myImage.png"]; 

、UIImageView変数の1、とのUIViewController変数の1:私が唯一の解決策は、これまでのところ、これを行うことで、ハックです。助けてくれる人には事前に感謝します。

答えて

1

素早く答え:あなたはあなたの中に追加したカスタムプロパティにアクセスできるようにするに

MyViewController *pager = myViewController; 

:に

UIViewController *pager = myViewController; 

あなたは行を変更する必要がありますMyViewControllerクラス。

説明

あなたMyViewControllerクラスは、おそらくこのような何か(簡体字)になります。

// MyViewController.h: 
@interface MyViewController : UIViewController 
{ 
    UIImageView * myImageView; 
} 
@property (readonly) UIImageView * myImageView; 
@end 

// MyViewController.m: 
@implementation MyViewController 
@synthesize myImageView; 
@end 

をあなたは追加することにより、UIViewControllerクラスをを高めていメンバーv ariableとプロパティ(myImageView)を元のクラスに追加します。

あなたの変数にアクセスするために、基本クラス(UIViewController)へのポインタを使用する場合、あなたはそれがUIViewController昔ながらのだったかのようにその変数を治療するためのコンパイラを言っている、とUIViewController昔ながらのmyImageViewの概念がありません。これが原因でコンパイラのエラーが発生します。

+0

答えに時間を割いてくれてありがとうeJamesに感謝しました。私は同じことを考えました。私の最初の問題は、上記と同じクラスへのポインタを保持する配列を使用していた。クラスにアクセスするために[myArray objectAtIndex:0]を使用して配列にアクセスすると、上記と同じ望ましくない結果が得られます。私の問題の解決策をご存知ですか?クラスのコンストラクタを指定してクラスポインタを配列に貼り付けることはできません。再度、感謝します! –

+0

MyViewController *を使用して配列からオブジェクトを取得するようにしてください:MyViewController * item = [myArray objectAtIndex:0]; item.myImageView.image = ... –

+0

または、((MyViewController *)[myArray objectAtIndex:0])。myImageView.image = ... –

関連する問題