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

“在BlahDataController.h中”

@interface BlahDataController : NSObject
-(NSString *)aMethod:(NSString *)theString;
@end

“在BlahDataController.m中”
#import "BlahDataController.h"
@implementation BlahDataController

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

@end

“在BobViewController.h中”
@interface BobViewController : NSObject
-(void)aMethodOfSomeSort;
@end

“在BobViewController.m中”
#import "BobViewController.h"
#import "BlahDataController.h"

@implementation BobViewController

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

@end

在“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

“在AnotherDataController.h中”
@interface AnotherDataController : NSObject
-(void)fixedMethod:(BlahDataController *)blahDataController theString:(NSString *)theString;
@end

“在AnotherDataController.m中”
#import "AnotherDataController.h"
#import "BlahDataController.h"
@implementation AnotherDataController

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

而且....它工作得很好...所以我想xcode只是无法识别一个类中的方法,而不能在另一个类中正常工作...伙计,我不知道为什么会发生此错误。 。

-=-=-

次要更新:
进行整个“xcode舞蹈”并不能解决问题
1)清理构建
2)删除衍生数据
3)完全关闭XCode,然后重新打开

最佳答案

tl; dr-项目中某处有重复文件!去追捕它,并无情地摧毁它!

好的,对于以后所有遇到此问题的人;这就是问题所在。

我几个月前就制作了BlahDataController。大约一周前,我重组了项目的文件夹,并将BlahDataController从名为“Blah”的文件夹移至了另一个名为“Data”的文件夹。

当我在“数据”文件夹中更改BlahDataController的代码时,我的一个类可以看到更改后的代码,但是,另一个类却看不到。

最终成为问题的是,当我移动BlahDataController时,它实际上创建了它的副本。因此,我在“Data”文件夹中有一个BlahDataController,在“Blah”文件夹中有一个较旧的BlahDataController。即使较旧的BlahDataController不再附加到项目管理器中的项目(xcode的左侧),该文件夹中仍存在物理文件的事实导致了此问题。

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

10-08 08:59