當我遇到一些錯誤時,我正在構建一個應用程序。在做了一些研究之後,我發現原因是因爲我正在處理2個文件,每個文件都是#import
。我讀到了解決這個問題的方法是使用前向聲明,但我無法找到一個很好的例子來說明這是如何實現的。轉發聲明
這是我的。
RootViewController.h
#import <UIKit/UIKit.h>
#import "FirstDetailViewController.h"
@protocol SubstitutableDetailViewController
- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem;
- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem;
@end
@interface RootViewController : UITableViewController <UISplitViewControllerDelegate, FirstDetailViewControllerDelegate>{
UISplitViewController *splitViewController;
UIPopoverController *popoverController;
UIBarButtonItem *rootPopoverButtonItem;
NSMutableArray *logMessages;
}
@property (nonatomic, assign) IBOutlet UISplitViewController *splitViewController;
@property (nonatomic, retain) UIPopoverController *popoverController;
@property (nonatomic, retain) UIBarButtonItem *rootPopoverButtonItem;
@end
FirstViewDetailController.h
#import <UIKit/UIKit.h>
#import "RootViewController.h
//test2
@protocol FirstDetailViewControllerDelegate <NSObject>
- (void)addItemViewController:(FirstDetailViewController *)controller didFinishEnteringItem:(NSString *)item;
@end
//end test2
@interface FirstDetailViewController : UIViewController <SubstitutableDetailViewController> {
//for the output
IBOutlet UITextView *outputView;
UIToolbar *navigationBar;
}
@property (nonatomic, retain) IBOutlet UIToolbar *navigationBar;
//test
@property(nonatomic, retain) NSString *message;
//end test
@property (nonatomic, retain) id <FirstDetailViewControllerDelegate> delegate;
@end
我知道,我需要更換#import
與@class
,但我做了兩次出現?另外,我已經在RootViewController.m文件中使用了#import "FirstDetailViewController.h"
,那麼我還需要在那裏切換它嗎?
我有點困惑,所以任何幫助將不勝感激!
我在執行協議的原因是因爲我想從一個類值傳遞給另一個。我在[THIS](http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers)問題中的第一個答案,因爲顯然這是做到這一點的正確方法。 – BloonsTowerDefence 2012-07-10 18:58:15
這就是一切都好,你只需要將協議聲明移動到一個新的文件 – 2012-07-10 19:00:05
好棒,感謝您的幫助 – BloonsTowerDefence 2012-07-10 19:18:33