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个。:)
如果包含头文件,则不需要转发声明。所以,你可以删除:
@class searchResultsViewController;
@class startPageViewController;
我认为你是对的,这些是不必要的,但他们会产生一个编译器错误?我只是尝试添加一个额外的@class MyClass到MyClass.m和.h,这些都没有导致编译器警告或错误。 – danh 2013-03-08 22:58:16
如果要在定义类之前引用类,则可以在接口(.h)文件中使用类转发声明。它不在实现(.m)文件中使用。请参阅:http://stackoverflow.com/questions/3904663/what-does-class-do-in-objective-c – 2013-03-08 23:01:08
是的,我明白。并且你正确地指出它们在.m中是无关紧要的。但OP正试图解决一个编译器错误,我认为你的建议没有解决。 (这些声明不需要,但无害)。 – danh 2013-03-08 23:04:10
的问题是在startPageViewController.m
文件无关@class
声明。这些隐藏了您从#import
声明中获得的完整定义。
您应该只有@class
向前声明在.h文件(如你已经这样做)。
另一个建议 - 许多编程语言(包括Objective-C)的标准做法是,类名以大写字母开头。变量和方法名称应以小写字母开头。这样做和其他人一样,使代码更易于阅读。
你在哪里使用'blueViewController.view'?无法在代码中看到。你应该发布'blueViewController'类。另一件事是你应该总是使用大写字母作为类名'BlueViewController'。 'blueViewController'表示变量名称。 – iDev 2013-03-08 22:52:46
超出语法,在switchViews方法中删除self.view(然后向现在的孤立视图添加子视图)看起来像是一个错误。 – danh 2013-03-08 22:56:21
刚刚注意到'我只有12'...你写代码在12,我敢打赌你可以处理大量复杂的东西。伟大的开始荣誉! :-) – danh 2013-03-08 23:02:12