簡體   English   中英

如何解決Xcode 7中沒有類型或協議命名錯誤?

[英]How To Solve No Type or Protocol Named Error In Xcode 7?

我試圖passing值從第二class passing到第一類,因為我正在使用protocoldelegate過程。 每當我運行我的程序時,我都面臨着問題。

No Type or Protocol Named 'locateMeDelegate'

沒有類型或協議命名...

Viewcontroller A .h

@interface first : UIViewController < locateMeDelegate > { }

在我的情況下,問題是通過將委托的頭文件導入委托者的類.h文件引起的。 這似乎造成了一種惡性循環。 一旦我從委托人的.h文件中刪除了委托標題的import語句,錯誤就消失了。

簡而言之,如果您希望其他類使用您的協議,則必須在頭文件中聲明它,如下所示:

// 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.ha屬性中聲明,以便我們可以引用MyClass並執行協議。 像這樣的東西:

// OtherClass.h

#import MyClass.h

@interface OtherClass : NSObject

@property (weak) id<MyProtocol> delegate;

@end

您不要忘記導入聲明協議的頭文件,否則Xcode將提示No Type或名為“MyProtocol”的協議

  • id<MyProtocol> delegate; 意味着您可以將任何符合MyProtocol協議的對象( id )設置為OtherClass的委托( <MyProtocol>

現在,您可以從MyClass創建一個OtherClass對象,並將其delegate屬性設置為self。 像這樣:

// MyClass.m

- (void)viewDidLoad() {
     OtherClass *otherClass = [[OtherClass alloc] init];
     otherClass.delegate = self;
}
  • 可以將委托設置為self,因為委托可以是任何對象, MyClass符合MyProtocol

我希望這可以提供幫助。 如果您想了解有關協議的更多信息,可以參考以下兩個網站:

使用協議 - Apple文檔

Ry的Objective-C教程 (這個很容易上手)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM