在AppDelegate.m中实现协议:"前缀属性必须跟随一个接口或协议"。

3

我正在向AppDelegate中添加两个协议,以便可以更换根视图控制器。我在之前的一个项目(2个月前)中使用以下方式进行了添加,并且它能够很好地工作:

@interface AppDelegate () <ChangeRootController1, ChangeRootController2>

@end

今天在项目中,我尝试做了同样的事情,但是所有的函数都出现了以下错误:

方法声明缺少上下文

于是我尝试了以下方法:

@interface AppDelegate () AppDelegate <ChangeRootController1, ChangeRootController2>

@end

现在我明白了。
Prefix attribute must be followed by an interface or protocol

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

2

您的第一个片段是正确的 - 这样做没有任何问题:

@interface AppDelegate () <ChangeRootController1, ChangeRootController2>

@end

我认为错误信息可能会让您产生误解。您确定已将方法声明(例如那些协议)放置在 @implementation AppDelegate@end 之间吗?


你说得没错,但我不必放置方法声明 - 相反,一旦你告诉我这是正确的,我重建了几次,最终错误消失了。 - sunny
我很高兴你已经解决了它。记得在遇到问题时执行“清理”或“清理构建文件夹..”,特别是当你有充分的理由说明为什么它不应该这样操作时。 - Steffen D. Sommer

1
忘掉你添加的第二个代码块。第一个是正确的!
缺失的部分是你有一些方法(可能是那些由ChangeRootController1ChangeRootController2所需的方法)在你的实现块之外。你的方法定义应该始终在所有者类的实现块内部。
@interface AppDelegate () AppDelegate <ChangeRootController1, ChangeRootController2>

@end

@implementation AppDelegate

//methods go here

@end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接