【问题标题】:How To Solve No Type or Protocol Named Error In Xcode 7?如何解决 Xcode 7 中没有类型或协议命名的错误?
【发布时间】:2016-01-05 06:22:07
【问题描述】:

我正在尝试将第二个classpassing 值转换为第一类,因为我正在使用protocoldelegate 进程。每当我运行我的程序时,我都会面临以下问题。

No Type or Protocol Named 'locateMeDelegate'

视图控制器 A .h

@interface first : UIViewController < locateMeDelegate > { }

【问题讨论】:

  • 能否添加协议声明以及如何在文件中导入协议头?

标签: ios objective-c delegates xcode7 protocols


【解决方案1】:

在我的情况下,问题是由将委托的头文件导入委托的类 .h 文件引起的。这似乎造成了一种恶性循环。一旦我从委托人的 .h 文件中删除了委托人标头的导入语句,错误就消失了。

【讨论】:

    【解决方案2】:

    通常,如果您希望其他类使用您的协议,则必须在头文件中声明它,如下所示:

    // MyClass.h
    
    @protocol MyProtocol;
    
    @interface MyClass : NSObject
    @end
    
    @protocol MyProtocol
    - (void) doSomething: (MyClass*) m;
    @end
    

    声明后,你应该在实现文件中实现协议的方法,它应该像这样符合协议:

    // MyClass.m
    
    @implementation MyClass <MyProtocol>
    
    pragma mark - MyProtocol methods
    
    - (void) doSomething: (MyClass *)m {
         // method body
    }
    
    @end
    

    完成这两个步骤后,您就可以在所需的任何课程中使用您的协议了。例如,假设我们想将数据从其他类(例如 OtherClass.h)传递给 MyClass。您应该在 OtherClass.h 中声明一个属性,以便我们可以引用 MyClass 并执行协议。像这样的:

    // OtherClass.h
    
    #import MyClass.h
    
    @interface OtherClass : NSObject
    
    @property (weak) id<MyProtocol> delegate;
    
    @end
    

    不要忘记在声明协议的地方导入头文件,否则Xcode会提示No Type or protocol named "MyProtocol"

    • id&lt;MyProtocol&gt; delegate; 表示您可以将任何符合MyProtocol 协议(&lt;MyProtocol&gt;)的对象(id)设置为OtherClass 的委托

    现在您可以从 MyClass 创建一个 OtherClass 对象并将其委托属性设置为 self。像这样:

    // MyClass.m
    
    - (void)viewDidLoad() {
         OtherClass *otherClass = [[OtherClass alloc] init];
         otherClass.delegate = self;
    }
    
    • 可以将委托设置为 self,因为委托可以是任何对象,并且 MyClass 符合 MyProtocol

    我希望这会有所帮助。如果您想了解更多有关协议的信息,可以参考这两个网站:

    Working with Protocols - Apple Documentation

    Ry's Objective-C Tutorial(这个好拿)

    【讨论】:

      【解决方案3】:

      我也遇到了同样的问题,似乎错误来自 Xcode 本身。请尝试在物理设备上运行。这将解决面临的问题。

      【讨论】:

        猜你喜欢
        • 2016-04-08
        • 2016-11-05
        • 2020-12-30
        • 1970-01-01
        • 2022-12-18
        • 1970-01-01
        • 2014-05-24
        • 2020-05-17
        • 1970-01-01
        相关资源
        最近更新 更多