Ios 自定义委托找不到声明

Ios 自定义委托找不到声明,ios,objective-c,delegates,Ios,Objective C,Delegates,我正在创建一个购物清单应用程序,并尝试在编辑项目时实现自定义委托。在头文件底部创建@protocol时,在@interface部分中尝试声明该协议的属性时,我得到一个错误:找不到GEMEditItemViewControllerDelegate的协议声明 这就是我的头文件的样子 #import <UIKit/UIKit.h> #import "GEMItem.h" @interface GEMEditItemViewController : UIViewController <

我正在创建一个购物清单应用程序,并尝试在编辑项目时实现自定义委托。在头文件底部创建
@protocol
时,在
@interface
部分中尝试声明该协议的属性时,我得到一个错误:
找不到GEMEditItemViewControllerDelegate的协议声明

这就是我的头文件的样子

#import <UIKit/UIKit.h>
#import "GEMItem.h"

@interface GEMEditItemViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>

@property GEMItem *item;
@property (weak) id<GEMEditItemViewControllerDelegate> delegate;

@end

@protocol GEMEditItemViewControllerDelegate <NSObject>
@required
- (void)controller:(GEMEditItemViewController *)controller didUpdateItem:(GEMItem *)item;
@end // End of delegate protocol
任何关于如何纠正这一点的想法都将不胜感激

这样试试:

@class GEMEditItemViewController; // forward declaration of class

@protocol GEMEditItemViewControllerDelegate <NSObject>
@required
- (void)controller:(GEMEditItemViewController *)controller didUpdateItem:(GEMItem *)item;
@end // End of delegate protocol

@interface GEMEditItemViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>

@property GEMItem *item;
@property (weak) id<GEMEditItemViewControllerDelegate> delegate;

@end
@class GEMEditItemViewController;//提前声明类别
@协议GEMEditItemViewControllerDelegate
@必需的
-(void)controller:(geEditItemViewController*)controller didUpdateItem:(geItem*)项;
@结束//委托协议结束
@接口GEMEditItemViewController:UIViewController
@属性项*项;
@属性(弱)id委托;
@结束

顺便说一句,您应该将两个选择器视图协议从头文件移动到.m文件中的类扩展名。世界不需要知道这个实现细节。

您的头文件应该如下所示:

@class GEMEditItemViewController;
@class GEMItem;

@protocol GEMEditItemViewControllerDelegate <NSObject>
@required
- (void)controller:(GEMEditItemViewController *)controller didUpdateItem:(GEMItem *)item;
@end // End of delegate protocol

@interface GEMEditItemViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>

@property GEMItem *item;
@property (weak) id<GEMEditItemViewControllerDelegate> delegate;

@end
@class GEMEditItemViewController;
@类双子;
@协议GEMEditItemViewControllerDelegate
@必需的
-(void)controller:(geEditItemViewController*)controller didUpdateItem:(geItem*)项;
@结束//委托协议结束
@接口GEMEditItemViewController:UIViewController
@属性项*项;
@属性(弱)id委托;
@结束

您不应该在头文件中使用直接导入
@class
指令用于防止循环依赖性。在您的情况下,GeItem导入应该在元文件中。

您也可以这样做

@protocol GEMEditItemViewControllerDelegate;
@interface GEMEditItemViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>

@property GEMItem *item;
@property (weak) id<GEMEditItemViewControllerDelegate> delegate;

@end

@protocol GEMEditItemViewControllerDelegate <NSObject>
@required
- (void)controller:(GEMEditItemViewController *)controller didUpdateItem:(GEMItem *)item;
@end
@protocol-gemediitemviewcontrollerdelegate;
@接口GEMEditItemViewController:UIViewController
@属性项*项;
@属性(弱)id委托;
@结束
@协议GEMEditItemViewControllerDelegate
@必需的
-(void)controller:(geEditItemViewController*)controller didUpdateItem:(geItem*)项;
@结束

当我将其移动到顶部时,我得到了一个错误,即
的类型应为
(GEMAddItemViewController*)
谢谢,我也移动了选择器视图协议
@protocol GEMEditItemViewControllerDelegate;
@interface GEMEditItemViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>

@property GEMItem *item;
@property (weak) id<GEMEditItemViewControllerDelegate> delegate;

@end

@protocol GEMEditItemViewControllerDelegate <NSObject>
@required
- (void)controller:(GEMEditItemViewController *)controller didUpdateItem:(GEMItem *)item;
@end