2012-06-22 176 views
0

我得到一个错误:未找到错误在协议声明

我无法找出是什么原因

协议声明。现在我正在使用ARC。我怀疑这个问题是由于这个。下面是我使用协议声明代码

//这是我们宣布委派

第一页.H

@protocol ImageDelegate 

@optional 

-(void)ImageSelected:(UIImage *)ImageName; 

@end 

@interface GetAddedMovieList : UIViewController<UITableViewDataSource,UITableViewDelegate>{ 

    id<ImageDelegate> delegate; 

} 

@property(nonatomic, strong)id<ImageDelegate> delegate; 

@end 

.M

@synthesize代表;


//这是我试图设置委托的页面。这里我收到错误。

@interface ImageEnlarge : UIViewController<ImageDelegate>{ 

IBOutlet UIImageView *imgEnlarge; 

NSString *stgImageName;  
} 

回答

0

你在.m文件把一个@interface,你想创建一个私有@interface?在那里宣布IBOutlet


看到您的编辑后,我猜测只有在ImageEnlarge类的.h文件中缺少一个导入。

+0

这是在另一个视图控制器。@interface ImageEnlarge:UIViewController {IB0utlet UIImageView * imgEnlarge; NSString * stgImageName; }不在我写代理的视图控制器中。 –

0

我在代码中看到了几个(可能的)问题。

@property(nonatomic, strong)id<ImageDelegate> delegate; 

代表应该弱。 GetAddedMovieList现在确实拥有委托,因此不应该影响其生命周期。

@synthesize delegate = delegate; 

默认情况下,@synth最近使用了ivar_或_ivar。随着最新的LLVM @synth不再是必要的顺便说一句,既不是ivars。

@synthesize @implementation之外?

你检查了你的#imports吗?

+0

我曾尝试过弱也没有强。我提到了很多帖子,并且做了这些帖子的回复。尽管我无法解决问题,但我发布了自己的问题。您能否让我知道我需要对现有代码进行哪些更改。提前致谢。 –

0

这可能是一个导入循环。你是否在你使用协议的地方输入正确的文件?你是否在协议文件中导入该文件?如果是这样,那么你有一个导入循环。相反,在协议标题中使用前向声明并且应该解决它。 (@class)

+0

是的,我尝试了所有这些选项,使用@class而不是#import。我已经导入了声明协议的正确文件。这个问题只有在ARC被启用时。否则我的代码完美地工作。 –

+0

你检查过导入循环吗? – Dancreek

0

试试吧。

@protocol ImageDelegate<NSObject> 

    @optional 

    -(void)ImageSelected:(UIImage *)ImageName; 

    @end 

并且还添加此属性。

@property(nonatomic,assign)id<ImageDelegate> delegate; 

我认为这对你有帮助。

+0

如果@property(nonatomic,assign)被给出。显示这个错误,“对于unsafe_unretained属性'委托'的现有伊娃'委托'必须是_unsafe_unretained” –