由於最近我有一個導入週期,我將所有的#import
語句(關於我自己的文件)從標題移動到相應的.m
-文件中。我還添加了@class
和@protocol
前向聲明來安撫編譯器。不過,我仍然得到他以下警告:即使使用了@protocol,Xcode也會警告丟失的協議定義
Cannot find the protocol definition for 'MyCustomDelegate'.
正如我所說的,有一個@protocol MyCustomDelegate
之前,我在@interface
- 塊使用它。有趣的是,如果相應的委託在另一個文件(其頭文件被導入到.m
-文件中)中聲明,則只會發生此警告。
我讀到一種解決方案是將委託聲明在單獨的頭文件中,並直接將該文件導入實現委託的類的頭文件中。這真的是要走的路嗎?還有其他解決方案嗎?我認爲這些代表已經足夠臃腫我們的代碼了,現在我應該繼續,甚至爲它聲明一個自己的文件?
小樣本代碼以更好地說明該問題:
NewFooController.h
#import <UIKit/UIKit.h>
@protocol NewFooControllerDelegate;
@interface NewFooController : UITableViewController
@property (nonatomic, weak) id<NewFooControllerDelegate> delegate;
@end
@protocol NewFooControllerDelegate
@end
HomeTableViewController.h
#import <UIKit/UIKit.h>
@protocol NewFooControllerDelegate;
// warning points to line below
@interface HomeTableViewController : UITableViewController <NewFooControllerDelegate>
@end
HomeTableViewController.m
#import "HomeTableViewController.h"
#import "NewFooController.h"
@implementation HomeTableViewController
@end
你在哪裏導入NewFooController.h刪除協議的聲明? – 2012-04-03 12:43:46
對不起,我複製並粘貼了部分代碼。 ;)我將'#import'NewTaskController.h''更改爲'#import'NewFooController.h' – 2012-04-03 14:03:25