【问题标题】:Delegate was not declared?代表没有宣布?
【发布时间】:2015-06-20 21:47:04
【问题描述】:

我有一些名为 mainContainer 的视图控制器,然后他导入了一些名为 myPills 的其他视图控制器,并将其添加为子视图。

mainContainer 也有一个protocol 用于将代表发送到myPills 类,它看起来像:

//mainContainer.h
@protocol mainScrollerDelegate <NSObject>

-(void)function;

@end

@interface MainContainerView : UIViewController<UIScrollViewDelegate>

显然,在myPills 类中我无法导入mainContainer 视图,但我确实想注册到mainContainer 代表。

所以在myPills

@interface MyPillsView : UIViewController <mainScrollerDelegate>

编译时会报错。

我已阅读此内容,并尝试将导入移至委托下 - 未成功。(未声明委托的相同错误)

Cannot find protocol declaration

您如何从 classA 监听 classB 中的委托,其中 classA 正在导入 classB ,所以 classB 无法导入 A 回来?

【问题讨论】:

    标签: ios objective-c delegates


    【解决方案1】:

    将您的协议声明放在它自己的Protocols.h 文件中,例如:

    //Protocols.h
    @protocol mainScrollerDelegate <NSObject>
    
    -(void)function;
    
    @end
    

    然后,只需将其导入发送委托方法的控制器和委托本身:

    #import "Protocols.h"
    
    @interface MyPillsView : UIViewController <mainScrollerDelegate>
    

    此方法将使您的所有协议井井有条,并有助于消除循环导入。

    旁注:您应该真正为您的协议使用类命名约定(即MainScrollerDelegate)。

    【讨论】:

    • protocols.h 应该是什么样子?我在 Xcode 中创建什么样的文件?你说的侧音是什么意思?非常感谢!
    • //Protocols.h 之后的代码块实际上是该文件中所需的所有代码。只需在 Xcode 中创建一个头文件。我的旁注是大写的 M 而不是小写的 m - 它有助于区分变量和类。
    • 顺便说一句,您将 @property(nonatomic,assign) id 委托放在哪里; ??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2017-12-28
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多