ARC的语义问题:对于类无可见@interface声明的选择(ARC Semantic Issue:

2019-09-02 04:55发布

非常基本的东西,但我无法解决问题的所在。 在我的项目,我有一个名为“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];

但是,如果我尝试以类似的方式来访问这些方法的另一个类,我得到的错误“为‘TheFeedStore’不可见@interface声明选择“hasItemBeenRead:”

1)我在班级进口TheFeedStore.h文件从我所访问TheFeedStore类的这些方法。

2)我已经确认像10倍,没有错字。

3)本人访问方法在TheFeedStore.h的头文件中还宣称

更新:只是为了检查,我已宣布TheFeedStore.h另一种测试方法,同样的结果,一个类可以访问新创建的方法,而三类休息不了。

更新:我已经尝试只是为了解决此问题,创建于TheFeedStore.h更多的方法。 新方法也可从其他类无法访问。 但是,如果这些新方法的返回类型为(RSSChannel *),这是在我的项目的另一个模型类,比他们成为访问。 如果他们的返回类型是不是像(无效)和(BOOL)一些其他类那么他们就无法访问。 这里是我的TheFeedStore.h https://gist.github.com/jessicamoore112/5558473

Answer 1:

你说你正在使用@class代替#进口在你的头文件,您试图访问的方法在头文件中声明,也没有任何形式的错别字。

在这种情况下,通常没有身体方面的看法,但我打算无论如何做,因为我曾经面临这样的问题很多次。 您可能已经创建项目的多个副本,在每个功能,还保持一个工作项目。

当你做到这一点,有时Xcode中仍然使用的几个文件的较旧的副本。 这意味着它依然采用了TheFeedStore.h的旧副本,当您试图访问的方法不是由您声明。

如何解决这个问题很简单。 转到从中您试图访问的方法和在这些方法中声明的文件的文件。

在右侧的工具部分中,检查“身份和类型”区域的位置和完整路径。

首先检查该项目的名称,如果是从你正在从事的项目名称不同,这意味着Xcode中仍然是拉动该文件的旧副本从您的项目以前的版本。 看到蓝色箭头,其中项目名称是13SampleMoreRequests在我的情况。

如果该名称与您的项目名称,然后我的回答没有解决您的问题。 如果它的不同,你应该使用由红色箭头指出了标志浏览新的位置使用文件的新副本。

一旦你浏览和使用新的文件,您的问题将得到解决,你将能够访问的方法。 如果还是不行,复制这些文件,从项目中删除,然后重新添加它们,你就不会面临这个问题。

希望这可以帮助!



Answer 2:

周期性进口,如Ah进口Bh ,同时也Bh进口Ah是最常见的问题。

在C语言中,周期性的进口量将无法正常工作和进口的人会被忽略。 请确保您不具有周期性的进口。 如果这样做,(例如,使用前向声明)解决它。

导入的问题也能够容易地检查,如果你产生预处理输出(你可以找到它在Xcode菜单中的一个)。



Answer 3:

这可能听起来很傻,但我偶尔也有类似的情况下,有时只是简单的退出并开始Xcode的帮助,有时往往会被卡住。 此外,有时清洗项目的帮助。 因为我有非常类似你单身的代码,它工作正常。



Answer 4:

家伙我曾遇到完全相同的问题。 在SO一些搜索和搜索引擎后,我能解决这个问题。

在我来说,我有四个文件:

  • RadioStation.h
  • RadioStation.m
  • ViewController.h
  • ViewController.m

我的错误是把我在RadioStation.m所有方法,只穿上radioStation.h我的变量,所以,当我输入radioSation.h我ViewController.m并尝试定义方法在我的应用程序这也正是问题的开始按钮,单击。 我得到了错误/警告“ARC语义问题:对于类无可见@interface声明选择”每次我建或运行应用程序模拟器时间。

我的解决办法是回到RadioStation.h文件,只是申报我所有的方法在那里。 因为他们已经在RadioStation.m定义我是好去。

所以一定要确保你已经正确声明您对将要在你的viewControllers导入的文件的方法。 希望帮助。



Answer 5:

在我来说,我有一些非常奇怪的路径条目

  • 框架搜索路径
  • 库搜索路径

(目标 - > YOUR_APP_NAME - >建立在“搜索路径”设置部分)

我删除他们的错误信息都没有了。



文章来源: ARC Semantic Issue: No visible @interface for Class declares the selector