如何在Xcode 7中解决没有类型或协议命名错误?

我试图passing值从第二class passing到第一类,因为我正在使用protocoldelegate进程。 每当我运行我的程序时,我面临着问题。

No Type or Protocol Named 'locateMeDelegate'

没有类型或协议命名...

Viewcontroller A .h

 @interface first : UIViewController  { } 

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

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

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

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

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

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

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

您不要忘记导入声明协议的头文件,否则Xcode将提示No Type或名为“MyProtocol”的协议

  • id delegate; 意味着您可以将任何符合MyProtocol协议的对象( id )设置为OtherClass的委托(

现在,您可以从MyClass创建一个OtherClass对象,并将其delegate属性设置为self。 喜欢这个:

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

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

使用协议 – Apple文档

Ry的Objective-C教程 (这个很容易上手)