Xcode错误:没有已知的选择器实例方法

Jor*_*ock 15 xcode objective-c

我需要帮助调试我的课程.我收到一个如此奇怪的错误,以至于我找不到任何类似的东西,所以我只是放下我的大部分代码.

//Tab.h
#import <UIKit/UIKit.h>
@class Tab;
@protocol TabDelegateDataSource <NSObject>
@required
-(void)removeTab:(Tab *)tab;
@end

@interface Tab : UIView
{
     id <TabDelegateDataSource> __strong _delegate;
}

@property(strong) id <TabDelegateDataSource> delegate;

-(void)removeTab;

@end

//  Tab.m
#import "Tab.h"
@implementation Tab
@synthesize delegate = _delegate;
-(void)removeTab
{
    [self.delegate removeTab:self];//Error here saying: No known instance method for selector 'removeTab:'  
}

@end
Run Code Online (Sandbox Code Playgroud)

dpj*_*nes 15

我现在可以随意重新创建并修复此错误.

确保.h标头定义了这个...

@protocol TabDelegateDataSource <NSObject>
-(void)removeTab:(Tab *)tab;
@end
Run Code Online (Sandbox Code Playgroud)

... 包含在您计划使用委托的任何位置,例如.m源代码顶部的某处,包括:

[self.delegate removeTab:self]
Run Code Online (Sandbox Code Playgroud)

如果编译器只看到TabDelegateDataSource 的前向定义,如下所示:

@protocol TabDelegateDataSource;
Run Code Online (Sandbox Code Playgroud)

你会得到错误:

error: no known instance method for selector 'removeTab:'
Run Code Online (Sandbox Code Playgroud)

而不是更期望的前向定义相关错误


Jor*_*ock 7

我认为这对Xcode来说是一个愚蠢的问题我重新启动了几次应用程序并最终解决了问题.