0

MyViewサブクラスがそのサブクラスとして定義されている場合UIView、Interface Builder でビューをクリックすると、カスタム クラスが既に に設定されていMyViewます。

しかし、ViewControllerviewDidLoadでは、

 self.view.foo = ... ;

fooはのプロパティではないというコンパイル エラーが発生しますUIView。次に、次のクラスを出力しself.viewます。

NSLog(@"Class of view is %@", NSStringFromClass([self.view class]));

案の定、それは出力されMyViewます。また、最初の行がコンパイルされないだけでなく、Xcode は「foo」という単語も「オートコンプリート」しません。しかし、明らかに、このクラスは no を出力しますUIViewが isMyViewを出力し、私のクラス定義のMyViewでは、次のように言いました:

@property (nonatomic, strong) NSMutableArray *foo;

インターフェイス.hファイルと実装.mファイルで次のように記述します。

@synthesize foo;

と同様MyView.hにインポートさViewController.hれます。これはなぜですか、これを修正するにはどうすればよいですか?

4

1 に答える 1

3

UIViewController は、そのビューがMyViewサブクラスのインスタンスであることを意図していることを知りません。

キャストする必要があります

MyView *myView = (MyView *)self.view;
myView.foo = @"Whatever";

これを簡素化したい場合は、UIViewController をself.myViewサブクラス化し、代わりに MyViewController サブクラスで常に参照することもできself.viewます。

@interface MyViewController : UIViewController

@property (nonatomic, strong) MyView *myView;

@end


@implementation MyViewController
@synthesize myView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
            self.myView = (MyView *)self.view;
    }
    return self;
}
@end
于 2012-05-26T20:51:12.633 に答える