在“BSViewController *”类型的对象上找不到属性“窗口”

时间:2013-01-20 01:07:18

标签: ios xcode

我正在尝试将UIButton显示为图像,并且出现标题错误。

另外,我想知道为什么()需要BSViewController (),因为它是由XCode创建的?

//
//  BSViewController.m

#import "BSViewController.h"

@interface BSViewController ()    // Why the "()"?
@end

@implementation BSViewController


- (IBAction) chooseImage:(id) sender{


    UIImageView* testCard = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ipad 7D.JPG"]]; 
//Property 'window' not found on object of type 'BSViewController *'
    self.window.rootViewController = testCard;
    [self.window.rootViewController addSubview: testCard];
    testCard.center = self.window.rootViewController.center;

     NSLog(@"chooseImage");

}


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end



//
//  BSViewController.h

#import <UIKit/UIKit.h>

@class BSViewController;
@interface BSViewController : UIViewController
<UIImagePickerControllerDelegate, UINavigationControllerDelegate>{
    IBOutlet UIButton* chooseImage;
}


- (IBAction) chooseImage:(id) sender;

@end

1 个答案:

答案 0 :(得分:11)

这一行:

    self.window.rootViewController = testCard;

尝试将imageView对象指针指定给现有的viewController对象指针。你应该有一个编译器警告。然后在下一行,您有效地尝试将其添加到自身作为子视图,这可能也会发出警告。

()表示类的类别扩展名。它是您的公共接口的扩展,允许您声明应该属于该类的私有实体。你应该把你的大部分界面都放在这里,只需将你的.h @interface中的内容保存在需要公开的内容中。

您的BSViewController类没有名为window的属性,因此您无法将其称为self.window。但在正常情况下,您应该可以像这样获得对窗口的引用:

    UIWindow* window = [[UIApplication sharedApplication] keyWindow];
    [window.rootViewController.view addSubview: testCard];

但是,如果您只想将testCard放入BSViewController的实例中,则不需要这样做。您只需要引用当前实例的视图:

    [self.view addSubview:testCard];