"'BlahDataController'没有可见的@interface声明选择器'aMethod:'"

Hig*_*ule 32 xcode objective-c ipad

我的问题的一个简单例子:

"在BlahDataController.h中"

@interface BlahDataController : NSObject
-(NSString *)aMethod:(NSString *)theString;
@end
Run Code Online (Sandbox Code Playgroud)

"在BlahDataController.m中"

#import "BlahDataController.h"
@implementation BlahDataController

-(NSString *)aMethod:(NSString *)theString
{
    return @"Something";
}

@end
Run Code Online (Sandbox Code Playgroud)

"在BobViewController.h中"

@interface BobViewController : NSObject
-(void)aMethodOfSomeSort;
@end
Run Code Online (Sandbox Code Playgroud)

"在BobViewController.m中"

#import "BobViewController.h"
#import "BlahDataController.h"

@implementation BobViewController

-(void)aMethodOfSomeSort
{
    BlahDataController *blahDataController = [[BlahDataController alloc] init];
    NSLog(@"%@",[blahDataController aMethod:@"Variable"]);
}

@end
Run Code Online (Sandbox Code Playgroud)

在"NSLog(@"%@",[blahDataController aMethod:@"Variable"])行上;" 我收到错误:"'BlahDataController'没有可见的@interface'声明选择器'aMethod:'"

有谁知道为什么会出现这个错误?

- = - = - = - = - = - = - = - = - = - = -

问题是,在我的实际程序中,我有相同的实现,它适用于以这种方式创建的数百种方法.但是,每隔一段时间,我就会在新创建的方法上收到此错误.我没有做任何不同的事情.它只是不会认识到它是新创造的存在.

- = - = - = - = - = - = - = - = - = - = -

这就是我目前正在解决的问题,虽然我不知道为什么编译器接受这种方式,但不是其他方式:

修改BobViewController.m:

#import "BobViewController.h"
#import "BlahDataController.h"
#import "AnotherDataController.h"

@implementation BobViewController

-(void)aMethodOfSomeSort
{
    BlahDataController *blahDataController = [[BlahDataController alloc] init];
    AnotherDataController *anotherDataController = [[AnotherDataController alloc] init];
    [anotherDataController fixedMethod:blahDataController theString:@"Variable"];
}

@end
Run Code Online (Sandbox Code Playgroud)

"在AnotherDataController.h中"

@interface AnotherDataController : NSObject
-(void)fixedMethod:(BlahDataController *)blahDataController theString:(NSString *)theString;
@end
Run Code Online (Sandbox Code Playgroud)

"在AnotherDataController.m中"

#import "AnotherDataController.h"
#import "BlahDataController.h"
@implementation AnotherDataController

-(void)fixedMethod:(BlahDataController *)blahDataController theString:(NSString *)theString
{
    NSLog(@"%@",[blahDataController aMethod:theString]);
}
@end
Run Code Online (Sandbox Code Playgroud)

并且....它工作得很好......所以我想xcode只是无法识别一个类中的方法,并且应该在另一个类中工作......伙计,我不知道为什么会出现这个错误.. .

- = - = -

次要更新:
完成整个"xcode舞蹈"没有解决问题
1)清理构建
2)删除派生数据
3)完全关闭XCode并重新打开

Hig*_*ule 57

tl; dr - 在项目的某个地方有一个重复的文件!去追捕它并毫不留情地摧毁它!

好的,对于将来这个问题的所有人; 这就是问题所在.

我几个月前制作了BlahDataController.大约一周前,我重新构建了项目的文件夹,并将BlahDataController从名为"Blah"的文件夹移动到另一个名为"Data"的文件夹.

当我在"Data"文件夹中更改BlahDataController的代码时,我的一个类可以看到更改的代码,但是,另一个类不能.

最后出现问题的是,当我移动BlahDataController时,它实际上创建了它的副本.所以我在"Data"文件夹中有一个BlahDataController,在"Blah"文件夹中有一个旧的BlahDataController.即使旧的BlahDataController不再附加到项目管理器中的项目(xcode的左侧),物理文件仍然存在于文件夹中的事实导致了这个问题.

删除BlahDataController的重复较旧副本后,问题已解决.

  • 它到达那里的方式有点不同,但根本原因是相同的:重复文件.让我感到震惊的是,当我告诉XCode"跳到定义"类时,我仍然得到了我所知道的类 - 即带有"缺失"选择器的类.尔加!谢谢! (2认同)