ARC语义问题:类没有可见的@interface声明select器
很基本的东西,但我无法解决问题的地方。 在我的项目中,我有一个名为“TheFeedStore”的类,有以下两种方法:
- (BOOL)hasItemBeenRead:(RSSItem *)item { ............ } - (void)markItemAsRead:(RSSItem *)item { ......... }
我正在使用下面的类方法,所以其他类可以使用它来访问这些方法:
+ (TheFeedStore *) sharedStore { static TheFeedStore *feedStore = nil; if (!feedStore) { feedStore = [[TheFeedStore alloc] init]; } return feedStore; }
在我的另一个class级,我可以通过写作轻松访问上述方法
if ([[TheFeedStore sharedStore] hasItemBeenRead:item])
要么
[[TheFeedStore sharedStore] markItemAsRead:entry];
但在另一个类,如果我尝试以类似的方式访问这些方法,我得到的错误“没有可见的@界面'TheFeedStore'声明select器'hasItemBeenRead:”
1)我已经从类中导入了TheFeedStore.h文件,我正在访问TheFeedStore类的这些方法。
2)我查了10次,没有错别字。
3)我正在访问的方法也在TheFeedStore.h头文件中声明
更新:只需要检查,我已经在TheFeedStore.h中声明了另一个testing方法,相同的结果,一个类可以访问新创build的方法,而其余的三个类不能。
更新:我试图在TheFeedStore.h创build更多的方法来解决这个问题。 新方法也不能从其他类访问。 但是,如果这些新方法的返回types是(RSSChannel *),这是我的项目中的另一个模型类,则它们变得可访问。 如果它们的返回types不是像(void)和(BOOL)这样的类,那么它们是不可访问的。 这是我的TheFeedStore.h https://gist.github.com/jessicamoore112/5558473
你说你在头文件中使用了@class而不是#import,你试图访问的方法是在头文件中声明的,没有任何types的拼写错误。
在这种情况下,通常没有人指出这个问题,但是我打算这样做,因为我已经多次面对这样的问题。 您可能已经创build了许多项目副本来处理每个function,并且还保留了一个工作项目。
当你这样做的时候,有时Xcode仍然使用较less的文件的旧版本。 这意味着当您尝试访问的方法没有被您声明时,它仍然在使用TheFeedStore.h的旧版本。
如何解决这个问题很简单。 转到您尝试访问方法的文件以及声明这些方法的文件。
在右侧的“实用程序”部分,检查“身份和types”区域下的位置和完整path。
首先检查项目的名称,如果它与您正在处理的项目名称不同,则意味着Xcode仍在从项目的上一版本中提取文件的旧副本。 在我的案例中看到项目名称是13SampleMoreRequests的蓝色箭头。
如果这个名字与您的项目名称相同,那么我的回答并不能解决您的问题。 如果不同,则应通过使用红色箭头指出的标志浏览新位置来使用该文件的新副本。
一旦你浏览和使用新的文件,你的问题将被解决,你将能够访问的方法。 如果仍然不能,请复制这些文件,从项目中删除,然后再次添加它们,而不会遇到此问题。
希望这可以帮助!
周期性import,如Ah
importBh
而Bh
import则是最常见的问题。
在C中,周期性的import将不起作用,其中一个import将被无声地忽略。 确保你没有周期性的import。 如果你这样做,解决它(例如使用正向声明)。
如果您生成预处理的输出(您可以在其中一个Xcode菜单中find它),也可以轻松检查导入问题。
我遇到了同样的问题。 经过一些search和search引擎,我能够解决这个问题。
在我的情况下,我有四个文件:
- RadioStation.h
- RadioStation.m
- ViewController.h
- ViewController.m
我的错误是将我的所有方法放在RadioStation.m中,只将variables放在radioStation.h中。因此,当我在ViewController.m上导入radioSation.h并尝试定义button单击我的应用程序时出现问题的方法。 我得到的错误/警告“ARC语义问题:没有可见@接口类声明select器”每次我build立或运行应用程序模拟器。
我的解决scheme是回到RadioStation.h文件,并在那里声明我所有的方法。 既然他们已经在RadioStation.m上定义了,我很高兴。
所以请确保你已经正确地声明你的方法在你的viewControllers将被导入的文件。 希望有所帮助。
这可能听起来很愚蠢,但我曾经有过类似的情况,有时只是简单的退出,并开始Xcode的帮助,它往往有时卡住。 另外,有时清理项目也有帮助。 因为我和你的单身代码非常相似,并且工作正常。
在我的情况下,我有一些非常奇怪的path条目
- 框架searchpath
- 图书馆searchpath
(“searchpath”部分中的目标 – > YOUR_APP_NAME – >生成设置)
我删除了他们,错误消息已经消失。