Import指令未授予对类的访问权限



我包含了这样一个文件:

#import "BannerPhoneContentController.h"

然而,当我尝试这样使用它时:

bannerContentController = [[BannerPhoneContentController alloc] init];

我得到错误:

Use of undeclared identifier 'BannerPhoneContentController';

是什么原因导致代码似乎忽略了我的导入?

这是横幅内容控制器的标题。

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "BannerContentController.h"
@interface BannerPhoneContentController : BannerContentController <UIScrollViewDelegate>
{   
    UIScrollView *scrollView;
    UIPageControl *pageControl;
    NSMutableArray *viewControllers;
    // To be used when scrolls originate from the UIPageControl
    BOOL pageControlUsed;
}
@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) UIPageControl *pageControl;
@property (nonatomic, retain) NSMutableArray *viewControllers;
- (IBAction)changePage:(id)sender;
@end

EDITbannerContentController的类型为BannerContentControllerNOT BannerPhoneContentController。后者是前者的一个亚型。值得注意的是,这个确切的代码在另一个应用程序中运行得很好,所以它与代码本身无关,只是它显然是如何被包含的。我被难住了。

EDITok发现了这个问题-不确定如何解决。我生成了预处理的文件,它包含的头文件实际上是这样的:

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "ContentController.h"
@interface PhoneContentController : ContentController <UIScrollViewDelegate>
{   
    UIScrollView *scrollView;
    UIPageControl *pageControl;
    NSMutableArray *viewControllers;
    // To be used when scrolls originate from the UIPageControl
    BOOL pageControlUsed;
}
@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) UIPageControl *pageControl;
@property (nonatomic, retain) NSMutableArray *viewControllers;
- (IBAction)changePage:(id)sender;
@end

请注意区别-所有的Banner都不见了。这就是文件过去的样子。然而,我已经检查过了,项目中的文件就是我在顶部发布的文件。我试着清洗溶液并再次构建。我该如何解决这个问题?为什么会发生这种情况?

EDIT包含所有这些的文件是代码库的一部分。我现在创建了一个新项目,导入了代码库,并以完全相同的方式再次将所有这些内容包含在该库中。它是有效的。我看过这两个项目,有问题的代码是相同的。这一定是项目设置吗?

它看起来像递归导入。例如,BannerContentController.h导入BannerPhoneContentController.hBannerPhoneContentController.h导入BannerContentController.h

如果是这种情况,那么您应该解决递归依赖关系。例如,使用远期申报。

在.h中使用@class BannerPhoneContentController和在.m中使用#import "BannerPhoneContentController.h"会得到相同的结果吗?

经过一番折腾,多亏了Yuras的评论,我生成了经过预处理的代码,并意识到问题是包含了旧版本的代码。

更有用的是为什么。这只是XCode中的一个错误,有时在打开增量链接时会发生——基本上,当代码的相应位被更改时,只更改预处理文件的部分就可以节省时间。不幸的是,这并不总是正确的。

令人恼火的是,解决方案是删除文件,清理构建,删除派生数据(window/oraniser/projects/project-name/delete derived data),重新启动xcode(也可能重新启动计算机,或者把它从窗口中扔出来买一个新的),然后重新导入文件。

XCode可能真的很痛苦。。。

最新更新