我正在尝试创建一个可以处理iAd的可重用类。
在我的.h file
中,我执行以下操作:
#import <iAd/iAd.h>
@protocol AdHelperDelegate;
@interface AdHelper:NSObject<ADBannerViewDelegate>
@property (strong) id<AdHelperDelegate> delegate;
@property (nonatomic, strong) ADBannerView *iAdBannerView;
...
@end
@protocol AdHelperDelegate;
@end
然后在我的.m file
我实施了iAd横幅:
-(void)showBanner
{
self.iAdBannerView = [[ADBannerView alloc] initWithFrame:CGRectZero];
self.iAdBannerView.frame = CGRectOffset(self.iAdBannerView.frame, 0, 361);
self.iAdBannerView.requiredContentSizeIdentifiers = [NSSet setWithObject:ADBannerContentSizeIdentifierPortrait];
self.iAdBannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
self.iAdBannerView.delegate = self;
[self.delegate.view addSubview:self.iAdBannerView];
}
我当然也实现了委托方法-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
我计划在我的项目中调用AdHelper
中的UIViewController
有类似的东西:
AdHelper *ah = [[AdHelper alloc] init];
ah.delegate = self;
[ah showBanner];
问题在于编译器说:Property 'view' not found on object of type 'id<AdHelperDelegate>'
我有办法访问代表的观点吗?
答案 0 :(得分:3)
您需要手动转换视图控制器,以便编译器知道您拥有的对象类型:
[((MyViewController *)self.delegate).view addSubview:self.iAdBannerView];
您还可以将视图声明从id<AdHelperDelegate>
更改为UIViewController<AdHelperDelegate>*
,这样就无需在此情况下进行投射。
答案 1 :(得分:1)
您需要将id
投射到UIViewController
。编译器无法知道id具有视图属性。
[((UIViewController *)self.delegate).view addSubview:self.iAdBannerView];