我包含了这样一个文件:
#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.h
,BannerPhoneContentController.h
导入BannerContentController.h
。
如果是这种情况,那么您应该解决递归依赖关系。例如,使用远期申报。
在.h中使用@class BannerPhoneContentController
和在.m中使用#import "BannerPhoneContentController.h"
会得到相同的结果吗?
经过一番折腾,多亏了Yuras的评论,我生成了经过预处理的代码,并意识到问题是包含了旧版本的代码。
更有用的是为什么。这只是XCode中的一个错误,有时在打开增量链接时会发生——基本上,当代码的相应位被更改时,只更改预处理文件的部分就可以节省时间。不幸的是,这并不总是正确的。
令人恼火的是,解决方案是删除文件,清理构建,删除派生数据(window/oraniser/projects/project-name/delete derived data),重新启动xcode(也可能重新启动计算机,或者把它从窗口中扔出来买一个新的),然后重新导入文件。
XCode可能真的很痛苦。。。