我要包含这样的文件:
#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
编辑 bannerContentController的类型为BannerContentController NOT BannerPhoneContentController。后者是前者的亚型。绝对值得注意的是,这个确切的代码在另一个应用程序中运行得很好,所以它与代码本身无关 - 只是它是如何被明显包含的。我很难过。
编辑确定发现问题 - 不知道如何修复它。我生成了预处理文件,其中包含的头文件实际上是这样的:
#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
注意区别 - 所有'横幅'都丢失了。这就是文件的样子。但是,我已经检查过,项目中的文件是我在顶部发布的文件。我尝试清理解决方案并再次构建。我该如何解决这个问题?为什么会发生这种情况?
编辑我所包含的所有文件都是代码库的一部分。我现在已经创建了一个新项目,导入了代码库,并以完全相同的方式再次将所有这些包含在该库中。它的工作原理。我已经查看了这两个项目,并且有问题的代码是相同的。这必须是项目设置?
答案 0 :(得分:1)
它看起来像递归导入。比方说,BannerContentController.h
导入BannerPhoneContentController.h
和BannerPhoneContentController.h
导入BannerContentController.h
。
如果是这种情况,那么您应该解决递归依赖关系。例如。使用前瞻声明。
答案 1 :(得分:0)
在.h中使用@class BannerPhoneContentController
,在.m中使用#import "BannerPhoneContentController.h"
会得到相同的结果吗?
答案 2 :(得分:0)
经过大量的讨论之后,感谢Yuras的评论,我生成了预处理的代码,并意识到问题是代码的OLD版本被包含在内。
更有用的是为什么。这只是XCode中的一个错误,有时会在启用增量链接时发生 - 基本上这是通过仅在代码的相应位被更改时更改预处理文件的各个部分来节省时间的地方。不幸的是,这并不总是正常工作。
解决方案,令人讨厌,是删除文件,清理构建,删除派生数据(窗口/ oraniser /项目/项目名称/删除派生数据),重新启动xcode(可能还重新启动计算机,或将其丢弃然后重新导入文件,然后重新导入文件。
XCode可能是一个真正的痛苦...