2013-07-15 45 views
1

有没有办法在.m文件中使用#import而不是.h文件?问题是我需要指定视图控制器是.h文件中的ADBannerViewDelegate,如果在.m文件中导入iAd,它不会识别它。 有没有办法解决这个问题,或者我坚持不得已#importiAd每次我看到控制器我#import#导入iAd而不是.h

+0

始终包含头文件(.h),而不是执行文件( .M)。将其导入到您使用的每个视图控制器中。 – Raptor

+2

在.h中导入iAd – Kevin

回答

0

是的。您可以将所有iAd代码放入.m文件中;你只需要使用类扩展(很常见)。类扩展,允许你声明变量,包括委托,创建属性等,全部来自.m文件。

类别扩展名位于.m文件的顶部,位于@implementation声明之前。

例如:

//.h 
#import <UIKit/UIKit.h> 
@interface HomeViewController : UIViewController 
@end 


//.m 
#import "HomeViewController.h" 
#import <iAd/iAd.h> 

//The following is the class extension 
@interface HomeViewController() <ADBannerViewDelegate> //add any delegates here { 
    IBOutlet ADBannerView *ad; //A reference to the ad 
    BOOL someBOOL;    //You can put any variables here 
} 
- (void)someMethod:(id)sender; 
@property (nonatomic, strong) UIView *someView; 
@end 

注:类扩展必须以@end结束,然后将定期类主体如下:@implementation HomeViewController...

苹果的文档做好进一步的解释类扩展。检查出来here


同样值得注意的是,这是一个自动创建的项目,称为“预编译头文件”。这个文件是一个地方,你可以导入你打算在整个项目中使用的其他类,所以你不必在每个类中手动导入它们。

继承人PCH的例子:

#import <Availability.h> 

#ifndef __IPHONE_5_0 
#warning "This project uses features only available in iOS SDK 5.0 and later." 
#endif 

#ifdef __OBJC__ 
    #import <UIKit/UIKit.h> 
    #import <Foundation/Foundation.h> 
    #import <iAd/iAd.h> 
    //Put any other classes here and you can use them from any file 
#endif 

如果您在项目中的文件看,在支持文件,你应该看到You-Project-Name-Prefix.pch

+0

这似乎工作。谢谢! 是否有任何理由将协议放入.h文件中? – aeubanks

+0

很高兴帮助。我不想说**从来没有**任何理由将协议放在.h文件中,但是自从创建了类扩展后,我无法想到我拥有的实例。真正的类扩展,我发现最低限度需要.h文件 - 除了公共变量。 – Andrew

相关问题