MPPopoverControllerDelegate.h文件
#import <Foundation/Foundation.h>
@class MPPopoverController;
@protocol MPPopoverControllerDelegate <NSObject>
@optional
- (void)popoverControllerDidDismissPopover:(MPPopoverController *)popoverController;
@end
MPPopoverController.h文件
#import <UIKit/UIKit.h>
@protocol MPPopoverControllerDelegate;
@interface MPPopoverController : UIViewController <MPPopoverControllerDelegate>
@property (nonatomic, assign) id<MPPopoverControllerDelegate> delegate;
@end
MPPopoverController.m文件
#import "MPPopoverController.h"
#import "MPPopoverControllerDelegate.h"
@implementation MPPopoverController
@end
@property (nonatomic, assign) id<MPPopoverControllerDelegate> delegate;
:此行有警告
找不到'MPPopoverControllerDelegate'
的协议定义
有什么问题?以及如何修复此警告?
如果替换'@protocol MPPopoverControllerDelegate';使用'#import“MPPopoverControllerDelegate.h',一切都会好的。
但是link - 在参考其他协议中你可以看到苹果说要使用@protocol
答案 0 :(得分:2)
是否绝对需要将协议声明放在不同的头文件中?除非它是一个非常大的协议定义(你的不是你的),我建议在你的接口声明下面声明它。
<强> MPPopoverController.h 强>
#import <UIKit/UIKit.h>
@protocol MPPopoverControllerDelegate;
@interface MPPopoverController : UIViewController
@property (nonatomic, assign) id<MPPopoverControllerDelegate> delegate;
@end
@protocol MPPopoverControllerDelegate <NSObject>
@optional
- (void)popoverControllerDidDismissPopover:(MPPopoverController *)popoverController;
@end
答案 1 :(得分:2)
编译器读取.m文件,并在必要时加载.h文件。所以它首先加载MPPopoverController.h
,当它读取它时,委托协议仍然是未声明的。您可以通过交换包含行来轻松修复此警告。让编译器首先读取委托.h文件。
#import "MPPopoverControllerDelegate.h"
#import "MPPopoverController.h"
@implementation MPPopoverController
@end
答案 2 :(得分:-1)
你确定你曾经在某个地方包括MPPopoverControllerDelegate.h吗?
答案 3 :(得分:-1)
在MPPopoverController.h和MPPopoverController.h中导入MPPopoverControllerDelegate.h应如下所示:
从问题中粘贴的代码副本已被删除。以下代码是从xcode复制粘贴的。
MPPopoverControllerDelegate.h:
@class MPPopoverController;
@protocol MPPopoverControllerDelegate <NSObject>
@optional
- (void)popoverControllerDidDismissPopover:(MPPopoverController *)popoverController;
@end
MPPopoverController.h
@protocol MPPopoverControllerDelegate;
@interface MPPopoverController : UIViewController{
id<MPPopoverControllerDelegate> delegate;
}
@property (nonatomic, assign) id<MPPopoverControllerDelegate> delegate;
@end
MPPopoverController.m
@implementation MPPopoverController
@synthesize delegate;
//rest of view controller class.
问题是在MPPopoverController接口中指定了<MPPopoverControllerDelegate>
。这意味着该类实现了这个协议!是错误的,因为该类是协议的所有者。所以你的逻辑在某些方面是错误的。