Я получаю странный сбой с обратным вызовом ошибки iAd. Вот мой краш журнала:Crash с iAd только на iOS 7 - слабый делегат - плохой указатель
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
делегат обратного вызова для ОВР:
- (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 является слабым свойством, поэтому он должен автоматически начинаться.
@property (nonatomic, weak) id<ADBannerViewDelegate> delegate;
Идеи?
Похоже, что авария происходит внутри вашего метода '[AdContainerView requestGAD]'. Как выглядит этот метод? Что на линии 265? –
@BrianNickel Я обновил вопрос с помощью обратного вызова делегата для iAd. Линия 265 находится у основания. – jjxtra
@BrianNickel В этом случае self IS является делегатом, поэтому он должен быть либо допустимым указателем на действительный объект, либо nil, и в этом случае обратный вызов делегата не должен произойти, если я не пропущу что-то. Не происходит на iOS 6, поэтому мне кажется, что это ошибка iOS 7. – jjxtra