好的,这已经被解释了好几次了(我使用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/

10-13 08:08