2015-04-23 34 views
3

我将两个协议添加到AppDelegate以便我可以交换根视图控制器。我做这在以前的项目(2个月前),像这样,它工作得很好:在AppDelegate.m中实现协议:“前缀属性必须跟一个接口或协议”

@interface AppDelegate() <ChangeRootController1, ChangeRootController2> 

@end 

所以,我没有在今天的项目是相同的,但后来我的所有功能,给这个错误:

缺少上下文对方法声明

所以,我想这一点:

@interface AppDelegate() AppDelegate <ChangeRootController1, ChangeRootController2> 

@end 

现在我得到

Prefix attribute must be followed by an interface or protocol 

使AppDelegate.m符合协议的正确方法是什么?

回答

2

你的第一个片段是正确的 - 也没什么不好做:

@interface AppDelegate() <ChangeRootController1, ChangeRootController2> 

@end 

我认为错误是在误导你。您是否确定将您的方法声明(例如这些协议)置于@implementation AppDelegate@end之间?

+0

你是对的,但我没有必要把方法声明放在 - 而是我重建几次,一旦你告诉我这是正确的,最终错误消失了。 – sunny

+0

我很高兴你的工作。当你遇到问题时,请记得做一个“清洁”或“清洁生成文件夹..”,你有充足的理由不应该这样做。 –

1

忘掉你在那里添加的第二个代码块。第一个是对的!

缺少的东西是您在实现块外部有一些方法(可能是ChangeRootController1ChangeRootController2所需的那些方法)。您的方法定义应始终位于所有者类的实现块中。

@interface AppDelegate() AppDelegate <ChangeRootController1, ChangeRootController2> 

@end 

@implementation AppDelegate 

//methods go here 

@end