仅在iOS 7上使用iAd崩溃-弱委托是错误的指针 [英] Crash with iAd only on iOS 7 - weak delegate is bad pointer

查看:87
本文介绍了仅在iOS 7上使用iAd崩溃-弱委托是错误的指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到iAd错误回调的奇怪崩溃.这是我的崩溃日志:

I'm getting a strange crash with the iAd error callback. Here is my crash log:

Exception Type: EXC_BAD_ACCESS Code: KERN_INVALID_ADDRESS at 0x2281
0com.apple.main-thread Crashed
0    libobjc.A.dylib     objc_retain + 17
1    YouDoodle AdView.m line 265 -[AdContainerView requestGAD]
2    iAd     -[ADBannerView _forwardErrorToDelegate:] + 254
3    iAd     -[ADBannerView serverBannerViewDidFailToReceiveAdWithError:] + 178
4    iAd     -[ADAdSpace setServiceAdSpace:] + 472
5    CoreFoundation  __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
6    CoreFoundation  _CFXNotificationPost + 1718
7    Foundation  -[NSNotificationCenter postNotificationName:object:userInfo:] + 76
8    Foundation  -[NSNotificationCenter postNotificationName:object:] + 30
9    iAd     -[ADAdSheetProxy _adSheetConnectionLost] + 292
10 ...   libdispatch.dylib   _dispatch_call_block_and_release + 10
11   libdispatch.dylib   _dispatch_client_callout + 22
12   libdispatch.dylib   _dispatch_main_queue_callback_4CF$VARIANT$up + 274
13   CoreFoundation  __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
14   CoreFoundation  __CFRunLoopRun + 1300
15   CoreFoundation  CFRunLoopRunSpecific + 522
16   CoreFoundation  CFRunLoopRunInMode + 106
17   GraphicsServices    GSEventRunModal + 138
18   UIKit   UIApplicationMain + 1136
19   YouDoodle  
AppDelegate.m line 129
main

http://crashes.to/s/c654d14dcfa

代理iAd的回调:

- (void) bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
    DLog(@"IAD Failed to load with error %@", error);

    self.adBannerContainer.hidden = YES;

    if (InternetAvailableWithAlert(NO))
    {
        if (self.gadAvailable)
        {
            self.gadBannerContainer.hidden = NO;
        }
        else
        {
            [self requestGAD];
        }
    }
}

- (void) requestGAD
{
    GADRequest* request = [[GADRequest alloc] init];

#if TARGET_IPHONE_SIMULATOR

    request.testDevices = @[GAD_SIMULATOR_ID];

#endif

    self.gadBanner.rootViewController = (self.gadBanner.rootViewController ?: self.viewController);
    [self.gadBanner loadRequest:request];
}

iAd视图委托是一个永远不会释放的单例.即使已发布,iAd类委托属性也是一个弱属性,因此它应该自动为空.

The iAd view delegate is a singleton which is never released. Even if it was released, the iAd class delegate property is a weak property so it should auto-nil.

@property (nonatomic, weak) id<ADBannerViewDelegate> delegate;

想法?

推荐答案

这是由于将Admob SDK根视图控制器重新设置为自身,导致视图控制器被释放后崩溃. Admob SDK使用分配引用而不是弱引用,这就是它崩溃的原因.

This was due to setting the Admob SDK root view controller back to itself, when the view controller has been deallocated, this crashes. Admob SDK uses an assign reference instead of weak which is why it crashed.

这篇关于仅在iOS 7上使用iAd崩溃-弱委托是错误的指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆