2013-03-08 29 views
1

我剛開始使用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

回答

0

如果包含頭文件,則不需要轉發聲明。所以,你可以刪除:

@class searchResultsViewController; 
@class startPageViewController; 
+1

我認爲你是對的,這些是不必要的,但他們會產生一個編譯器錯誤?我只是嘗試添加一個額外的@class MyClass到MyClass.m和.h,這些都沒有導致編譯器警告或錯誤。 – danh 2013-03-08 22:58:16

+0

如果要在定義類之前引用類,則可以在接口(.h)文件中使用類轉發聲明。它不在實現(.m)文件中使用。請參閱:http://stackoverflow.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

3

的問題是在startPageViewController.m文件無關@class聲明。這些隱藏了您從#import聲明中獲得的完整定義。

您應該只有@class向前聲明在.h文件(如你已經這樣做)。

另一個建議 - 許多編程語言(包括Objective-C)的標準做法是,類名以大寫字母開頭。變量和方法名稱應以小寫字母開頭。這樣做和其他人一樣,使代碼更易於閱讀。

相關問題