找不到协议声明(Cannot find protocol declaration for)

2019-06-23 15:30发布

我有两个目的,这两者都是视图控制器。 第一(III族称之为viewController1)中声明的协议。 第二(其意料之中我将其命名为viewController2)符合该协议。

Xcode是给我的生成错误:“无法找到协议声明viewController1”

我已经看到了关于这个问题的各种问题,我敢肯定这是一个循环的错误做,但我就是不能看到它在我的情况...

下面的代码..

viewController1.h

@protocol viewController1Delegate;

#import "viewController2.h"

@interface viewController1 {

}

@end

@protocol viewController1Delegate <NSObject>

// Some methods

@end

viewController2.h

#import "viewController1.h"

@interface viewController2 <viewController1Delegate> {

}

@end

起初,我上面说的协议声明中viewController1进口线。 这是防止项目从全面建设。 因此搜索后,我意识到这个问题,并围绕切换两行。 现在我得到一个警告(而不是错误)。 该项目建立精细和实际运行完美。 但我还是觉得一定有什么不对的,给予警告。

现在,据我所看到的,当编译器到达viewController1.h,它看到的第一件事情是该协议的声明。 然后,导入viewController.h文件,并认为这实现了该协议。

如果它被周围编译它们的另一种方式,它会看viewController2.h第一,它会做的第一件事是进口viewController1.h其中第一行是该协议的声明。

我缺少的东西吗?

Answer 1:

取下此行viewController1.h

#import "viewController2.h"

的问题是, viewController2的接口协议声明之前预处理。

该文件的一般结构应该是这样的:

@protocol viewController1Delegate;
@class viewController2;

@interface viewController1
@end

@protocol viewController1Delegate <NSObject>
@end


Answer 2:

    A.h:
    #import "B.h"  // A

    @class A;

    @protocol Delegate_A 
       (method....)
    @end

    @interface ViewController : A
    @property(nonatomic,strong)id<ViewControllerDelegate> preViewController_B;(protocol A)
    @end


    B.h:
    #import "A.h"  // A

    @class B;

    @protocol Delegate_B 
       (method....)
    @end

    @interface ViewController : B
    @property(nonatomic,strong)id<ViewControllerDelegate> preViewController_A;(protocol B)
    @end

    A.m:
    @interface A ()<preViewController_B>
    @end

    @implementation A
    (implement protocol....)
    end


    B.m:
    @interface B ()<preViewController_A>
    @end

    @implementation B
    (implement protocol....)
   @end


Answer 3:

对于那些谁可能需要它:

它也可以通过移动ViewController1.hViewController2的实现文件(.M)进口来解决这个头文件(.H)代替。

像这样:

ViewController1.h

#import ViewController2.h

@interface ViewController1 : UIViewController <ViewController2Delegate>
@end

ViewController2.h

@protocol ViewController2Delegate;

@interface ViewController2
@end

ViewController2.m

#import ViewController2.h
#import ViewController1.h

@implementation ViewController2
@end

在那里发生的错误,因为ViewController1.hViewController2.h协议宣布前进口这将修复的情况。



文章来源: Cannot find protocol declaration for