【发布时间】:2013-07-13 17:25:34
【问题描述】:
我一直在尝试将 iAD 实现到我的一个视图控制器中,并且在为 .h 和 .m 文件编写代码之后......我收到了这个语义问题错误:
@synthesize of 'weak' property is only allowed in ARC or GC mode
我特别在 .m 文件的 @implementation 旁边得到了这个错误。非常感谢任何有关我如何解决此问题的建议。
ALSO我想知道是否可以将此广告横幅(一旦工作)从该视图控制器复制并粘贴到其他视图控制器而不重新编码?
这是我在 .h 文件中的 iAD 代码
#import <UIKit/UIKit.h>
#import <iAd/iAd.h>
@interface ViewController : UIViewController <ADBannerViewDelegate>
@property (weak, nonatomic) IBOutlet ADBannerView *banner;
@end
这是我在 .m 文件中的 iAD 代码
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.banner.delegate = self;
}
- (void) viewDidLayoutSubviews {
if (self.banner.bannerLoaded) {
CGRect contentFrame = self.view.bounds;
CGRect bannerFrame = self.banner.frame;
contentFrame.size.height -= self.banner.frame.size.height;
bannerFrame.origin.y = contentFrame.size.height;
self.banner.frame = bannerFrame;
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication: (BOOL)willLeave
{
NSLog(@"bannerViewActionShouldBegin");
return YES;
}
- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
NSLog(@"bannerViewDidLoadAd");
}
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
NSLog(@"didFailToReceiveAdWithError");
}
- (void)bannerViewActionDidFinish:(ADBannerView *)banner {
NSLog(@"bannerViewActionDidFinish");
}
@end
【问题讨论】:
-
您是否尝试过启用 ARC?
weak只能和ARC一起使用(iOS上没有垃圾回收) -
@Matthias Bauch 是的,这听起来很傻,但我该怎么做呢?并请解释您的报价
-
Xcode 的 Edit -> Refactor 菜单中有一个“Convert to Objective-C ARC”菜单项。但在这样做之前,您应该先了解一下 ARC,这可能会导致您现有代码出现问题。如果您想坚持使用手动发布模型,请将
weak替换为assign。 -
或者你可以用
assign代替weak。 -
@MATTHIAS BAUCH 好吧,在阅读您的回复之前,我实际上只是快速阅读了自动引用计数 (ARC),所以我明白……但是,如果我坚持手动发布模型并用 assign 替换 weak ...我收到信号 SIGABRT
标签: ios xcode error-handling xcode4 iad