我的问题的一个简单示例:
“在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旧副本后,此问题已解决。