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

问题描述:

我刚开始使用Objective -C。我的代码不断给出错误:在前向类对象'startPageViewController'中找不到Property'view'。我无法弄清楚它是什么!这是我的代码。iOS - 在前向类对象中找不到属性“视图”

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个。:)

+0

你在哪里使用'blueViewController.view'?无法在代码中看到。你应该发布'blueViewController'类。另一件事是你应该总是使用大写字母作为类名'BlueViewController'。 'blueViewController'表示变量名称。 – iDev 2013-03-08 22:52:46

+1

超出语法,在switchViews方法中删除self.view(然后向现在的孤立视图添加子视图)看起来像是一个错误。 – danh 2013-03-08 22:56:21

+1

刚刚注意到'我只有12'...你写代码在12,我敢打赌你可以处理大量复杂的东西。伟大的开始荣誉! :-) – danh 2013-03-08 23:02:12

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

@class searchResultsViewController; 
@class startPageViewController; 
+1

我认为你是对的,这些是不必要的,但他们会产生一个编译器错误?我只是尝试添加一个额外的@class MyClass到MyClass.m和.h,这些都没有导致编译器警告或错误。 – danh 2013-03-08 22:58:16

+0

如果要在定义类之前引用类,则可以在接口(.h)文件中使用类转发声明。它不在实现(.m)文件中使用。请参阅:http://*.com/questions/3904663/what-does-class-do-in-objective-c – 2013-03-08 23:01:08

+0

是的,我明白。并且你正确地指出它们在.m中是无关紧要的。但OP正试图解决一个编译器错误,我认为你的建议没有解决。 (这些声明不需要,但无害)。 – danh 2013-03-08 23:04:10

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

您应该只有@class向前声明在.h文件(如你已经这样做)。

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