【问题标题】:iAd Banner causing EXC_BAD_ACCESSiAd 横幅导致 EXC_BAD_ACCESS
【发布时间】: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


【解决方案1】:

原来我犯了一个错误,没有在主线程上加载 iAd 横幅(以及其他 UIKit 对象)......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多