【发布时间】:2014-01-22 10:47:37
【问题描述】:
曾几何时,有一个 iAd Banner 效果很好。有一天,它决定在无缘无故被点击时触发 EXC_BAD_ACCESS。
所以我正在开发一款 iOS 小游戏,它的屏幕顶部有一个 iAd 横幅。当bannerViewActionShouldBegin: willLeaveApplication: 被调用时,我发送一个NSNotification 来暂停游戏,然后我返回TRUE。
它曾经按预期工作,直到 2 天前点击横幅开始导致 EXC_BAD_ACCESS
与横幅相关的代码如下:
标题:
@interface JAGameBackground : UIView <ADBannerViewDelegate>
{
...
ADBannerView *adBannerView;
}
主要:
+(id)gameView
{
JAGameBackground *aBackground = [[JAGameBackground alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height + [UIScreen mainScreen].bounds.size.width)];
aBackground.adBannerView = [[ADBannerView alloc] initWithFrame:CGRectZero];
aBackground.adBannerView.delegate = aBackground;
[aBackground addSubview:aBackground.adBannerView];
...
return aBackground;
}
-(BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
{
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFICATION_PAUSE object:nil];
return TRUE;
}
并使用 Instruments 运行它:
关于如何给这个问题一个童话般的结局有什么想法吗?
【问题讨论】:
-
gameView 中的第一行看起来很可疑。看起来您第二次调用 JAGameBackground 的初始化程序。
-
第二次?我的理解是它返回一个初始化的实例
-
您应该创建一个类方法并使用 [[JAGameBackground alloc] initWithFrame: ...] 创建实例
-
好的,我已经更新了我的代码。
EXC_BAD_ACCESS仍然逍遥法外 -
您在项目中使用 ARC 吗?您知道发生此错误的代码行吗?(您可以捕获所有异常来执行此操作)
标签: ios objective-c exc-bad-access instruments iad