非常基本的东西,但我无法解决问题所在。在我的项目中,我有一个名为“TheFeedStore”的类,有以下两种方法:
- (BOOL)hasItemBeenRead:(RSSItem *)item
{
............
}
- (void)markItemAsRead:(RSSItem *)item
{
.........
}
我正在使用以下类方法,因此其他类可以使用它来访问这些方法:
+ (TheFeedStore *) sharedStore
{
static TheFeedStore *feedStore = nil;
if (!feedStore) {
feedStore = [[TheFeedStore alloc] init];
}
return feedStore;
}
在我的另一个课程中,我可以通过编写
轻松访问上述方法if ([[TheFeedStore sharedStore] hasItemBeenRead:item])
或
[[TheFeedStore sharedStore] markItemAsRead:entry];
但是在另一个类中,如果我尝试以类似的方式访问这些方法,我得到错误“NoFeedStore'没有可见@interface'声明选择器'hasItemBeenRead:”
1)我已经在我的类中导入了TheFeedStore.h文件 访问TheFeedStore类的这些方法。
2)我已经检查了10次并且没有拼写错误。
3)我正在访问的方法也在头文件中声明 TheFeedStore.h
UPDATE:为了检查,我已经在TheFeedStore.h中声明了另一个测试方法,同样的结果,一个类可以访问新创建的方法,而其余三个类则不能。
更新:我已尝试在TheFeedStore.h中创建更多方法,仅用于解决此问题。其他类也无法访问新方法。但是如果这些新方法的返回类型是(RSSChannel *),它是我项目中的另一个模型类,那么它们就变得可访问了。如果它们的返回类型不是某些类,如(void)和(BOOL)那么它们是不可访问的。这是我的TheFeedStore.h https://gist.github.com/jessicamoore112/5558473
答案 0 :(得分:6)
您已经说过在头文件中使用@class而不是#import,您尝试访问的方法在头文件中声明,并且没有任何类型的拼写错误。
在这种情况下,通常没有人指出这个问题,但无论如何我都会这样做,因为我多次遇到过这样的问题。您可能已经创建了许多项目副本,以处理每个功能并保持工作项目。
执行此操作时,有时Xcode仍在使用少量文件的旧版本。这意味着当你没有声明你试图访问的方法时,它仍在使用TheFeedStore.h的旧版本。
如何解决这个问题非常简单。转到您尝试访问方法的文件以及声明这些方法的文件。
在右侧的“公用事业”部分中,检查“身份和类型”区域下的位置和完整路径。
首先检查项目的名称,如果它与您正在处理的项目名称不同,这意味着Xcode仍在从项目的上一版本中提取文件的旧副本。在我的案例中,请参阅项目名称为13SampleMoreRequests的蓝色箭头。
如果此名称与您的项目名称相同,那么我的答案无法解决您的问题。如果不同,则应使用红色箭头指示的符号浏览新位置,以使用该文件的新副本。
一旦浏览并使用新文件,您的问题就会得到解决,您将能够访问这些方法。如果你仍然不能,复制这些文件,从项目中删除,然后再次添加它们,你将不会遇到这个问题。
希望这有帮助!
答案 1 :(得分:2)
周期性进口,例如A.h
导入B.h
,B.h
导入A.h
是最常见的问题。
在C语言中,循环导入不起作用,其中一个导入将被默默忽略。确保您没有周期性导入。如果你这样做,解决它(例如使用前向声明)。
如果生成预处理输出(也可以在其中一个Xcode菜单中找到),也可以轻松检查导入问题。
答案 2 :(得分:1)
这可能听起来很傻,但我偶尔会遇到类似的情况,有时只是简单的退出并开始xcode有帮助,它有时会卡住。 此外,有时清理项目有帮助。 因为我和你的单身代码非常相似,而且效果很好。
答案 3 :(得分:1)
伙计我遇到过同样的问题。在搜索了SO和搜索引擎后,我能够解决它。
在我的案例中,我有四个文件:
我的错误是将我的所有方法都放在RadioStation.m中,并且只将我的变量放在radioStation.h上 因此,当我在ViewController.m上导入radioSation.h并尝试定义按钮时单击我的应用程序的方法,这是问题开始的地方。 我收到错误/警告“ARC语义问题:每次构建或运行应用程序模拟器时,没有可见的@interface for Class声明选择器。”
我的解决方案是回到RadioStation.h文件,然后在那里声明我的所有方法。 因为他们已经在RadioStation.m上定义了,所以我很高兴。
因此,请确保已在要在viewControllers上导入的文件上正确声明了方法。 希望有所帮助。
答案 4 :(得分:1)
在我的情况下,我在
中有一些非常奇怪的路径条目(目标 - > YOUR_APP_NAME - >“搜索路径”部分中的构建设置)
我删除了它们,错误消息消失了。