好的,这已经被解释了好几次了(我使用this post on SO到达了那里的大部分方式),但是我缺少一些东西。我能够干净地进行编译,并且可以设置委托以及从委托中调用方法,但是我在构建时收到警告:
No definition of protocol 'DetailViewControllerDelegate' is found
我只有一个DetailViewController和RootViewController。我正在从DetailViewController调用RootViewController中的方法。我已经将代表设置为:
在
RootViewController.h
中:#import "DetailViewController.h"
@interface RootViewController : UITableViewController <NSFetchedResultsControllerDelegate, DetailViewControllerDelegate> //Error shows up here
{
//Some Stuff Here
}
//Some other stuff here
@end
在
RootViewController.m
中,使用detailViewController.delegate = self
创建视图时定义委托在
DetailViewController.h
中:@protocol DetailViewControllerDelegate;
#import "RootViewController.h"
@interface DetailViewController : UITableViewController <UITextFieldDelegate>
{
id <DetailViewControllerDelegate> delegate;
}
@property (nonatomic, assign) id <DetailViewControllerDelegate> delegate;
@end
@protocol DetailViewControllerDelegate
//some methods that reside in RootViewController.m
@end
对于在
DetailViewController.h
中的导入上方声明协议,我感到很奇怪,但如果不这样做,它就不会构建。就像我说的那样,这些方法都很好,并且没有其他错误。我在这里想念什么? 最佳答案
pheelicks在那里很多,但看起来您的某些协议方法也使用了DetailViewController
类,我想它看起来像这样:
@protocol DetailViewControllerDelegate <NSObject>
- (void) controller:(DetailViewController *)controller hasSomething:(id)thing;
@end
@class DetailViewController : UITableViewController <UITextFieldDelegate> {
id <DetailViewControllerDelegate> delegate;
}
@property (nonatomic, assign) id <DetailViewControllerDelegate> delegate;
@end
并且您还没有定义
DetailViewController
,因此您将在协议定义中得到一个错误。您可以通过两种方式解决此问题:
a)在协议之前声明(但尚未定义)该类
@class DetailViewController;
@protocol DetailViewControllerDelegate <NSObject>
- (void) controller:(DetailViewController *)controller hasSomething:(id)thing;
@end
b)在协议方法中仅使用
UITableViewController
而不是DetailViewController
。@protocol DetailViewControllerDelegate <NSObject>
- (void) controller:(UITableViewController *)controller hasSomething:(id)thing;
@end
我个人选择解决方案(a),但这实际上取决于您要执行的操作。
希望能有所帮助。
关于iphone - 在 objective-c (iPhone)中正确声明委派,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2731702/