如何在Xcode 7中解决没有类型或协议命名错误?
我试图passing
值从第二class
passing
到第一类,因为我正在使用protocol
和delegate
进程。 每当我运行我的程序时,我面临着问题。
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教程 (这个很容易上手)