iOS - 在前向类对象中找不到属性“视图”

时间:2013-03-08 21:49:33

标签: objective-c viewcontroller

我刚刚开始使用Objective -C。我的代码不断给出错误:在转发类对象'startPageViewController'中找不到属性'view'。我无法弄明白它是什么!这是我的代码。

startPageViewController.h -

#import <UIKit/UIKit.h>

@class searchResultsViewController;
@class startPageViewController;

@interface startPageViewController : UIViewController

- (IBAction)switchViews:(id)sender;

@property (strong, nonatomic) IBOutlet UITextField * searchterm;
@property (nonatomic, retain) startPageViewController *blueViewController;
@property (nonatomic, retain) searchResultsViewController *yellowViewController;

@end

startPageViewController.m -

#import "startPageViewController.h"
#import "searchResultsViewController.h"

@class searchResultsViewController;
@class startPageViewController;

@interface startPageViewController ()

@end

@implementation startPageViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (IBAction)switchViews:(id)sender {
    [self.view removeFromSuperview]; // <-- Error here
    [self.view insertSubview:_yellowViewController.view atIndex:0];
}

- (void)viewDidUnload {
    [self setSearchterm:nil];
    [super viewDidUnload];
}
@end

searchResultsViewController.h -

#import <UIKit/UIKit.h>

@interface searchResultsViewController : UIViewController

@property (strong, nonatomic) IBOutlet UIWebView *googleResults;
@property (strong, nonatomic) IBOutlet UIWebView *bingResults;
@property (strong, nonatomic) IBOutlet UIWebView *amazonResults;
@property (strong, nonatomic) IBOutlet UIWebView *ebayResults;

@end

searchResultsViewController.m -

#import "searchResultsViewController.h"

@interface searchResultsViewController ()

@end

@implementation searchResultsViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *googleUrlAddress = @"http://www.google.com/";
    NSURL *googleUrl = [NSURL URLWithString:googleUrlAddress];
    NSURLRequest *googleRequestObj = [NSURLRequest requestWithURL:googleUrl];
    [_googleResults loadRequest:googleRequestObj];
    // --------------------
    NSString *bingUrlAddress = @"http://www.bing.com/";
    NSURL *bingUrl = [NSURL URLWithString:bingUrlAddress];
    NSURLRequest *bingRequestObj = [NSURLRequest requestWithURL:bingUrl];
    [_bingResults loadRequest:bingRequestObj];
    // --------------------
    NSString *amazonUrlAddress = @"http://www.amazon.com/";
    NSURL *amazonUrl = [NSURL URLWithString:amazonUrlAddress];
    NSURLRequest *amazonRequestObj = [NSURLRequest requestWithURL:amazonUrl];
    [_amazonResults loadRequest:amazonRequestObj];
    // --------------------
    NSString *ebayUrlAddress = @"http://www.ebay.com/";
    NSURL *ebayUrl = [NSURL URLWithString:ebayUrlAddress];
    NSURLRequest *ebayRequestObj = [NSURLRequest requestWithURL:ebayUrl];
    [_ebayResults loadRequest:ebayRequestObj];
}

- (void)viewDidUnload {
    [self setGoogleResults:nil];
    [self setBingResults:nil];
    [self setAmazonResults:nil];
    [self setEbayResults:nil];
    [super viewDidUnload];
}
@end

提前致谢!

顺便说一句,请不要太复杂。我只有12岁。:)

2 个答案:

答案 0 :(得分:4)

问题是@class文件中无关的startPageViewController.m声明。这些隐藏了您从#import语句中获得的完整定义。

你应该在.h文件中只有@class前向声明(就像你已经在做的那样)。

另一个建议 - 许多编程语言(包括Objective-C)的标准做法是,类名以大写字母开头。变量和方法名称应以小写字母开头。与其他人一起执行此操作可使代码更易于阅读。

答案 1 :(得分:0)

如果您包含头文件,则不需要转发声明。所以你可以删除:

@class searchResultsViewController;
@class startPageViewController;