2011-12-04 136 views
0

我有一个iPhone应用程序,它使用iAd ...该应用程序崩溃某个时候与以下消息;iPhone应用程序崩溃,例外

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType bannerViewDidLoadAd:]: unrecognized selector sent to instance 0x621cd10' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00e015a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x00f55313 objc_exception_throw + 44 
    2 CoreFoundation      0x00e030bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
    3 CoreFoundation      0x00d72966 ___forwarding___ + 966 
    4 CoreFoundation      0x00d72522 _CF_forwarding_prep_0 + 50 
    5 CoreFoundation      0x00d71c7d __invoking___ + 29 
    6 CoreFoundation      0x00d71b51 -[NSInvocation invoke] + 145 
    7 CoreFoundation      0x00d72a04 ___forwarding___ + 1124 
    8 CoreFoundation      0x00d72522 _CF_forwarding_prep_0 + 50 
    9 iAd         0x00[Switching to process 8860 thread 0x207] 
0139f9 -[ADDistributedMessagingCenter messagePort:receivedMessage:withData:] + 251 
    10 iAd         0x00014012 ADMessagePortCallBack + 75 
    11 CoreFoundation      0x00db8f4c __CFMessagePortPerform + 396 
    12 CoreFoundation      0x00de2944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    13 CoreFoundation      0x00d42cf7 __CFRunLoopDoSource1 + 215 
    14 CoreFoundation      0x00d3ff83 __CFRunLoopRun + 979 
    15 CoreFoundation      0x00d3f840 CFRunLoopRunSpecific + 208 
    16 CoreFoundation      0x00d3f761 CFRunLoopRunInMode + 97 
    17 GraphicsServices     0x033fe1c4 GSEventRunModal + 217 
    18 GraphicsServices     0x033fe289 GSEventRun + 115 
    19 UIKit        0x002ffc93 UIApplicationMain + 1160 
    20 MyApp      0x00001ba8 main + 102 
    21 MyApp      0x00001b39 start + 53 
) 
terminate called after throwing an instance of 'NSException' 

下面是我的NSZombie消息;

# Category Event Type RefCt Timestamp Address Size Responsible Library Responsible Caller 
77 DetailController Zombie -1 04:01.914.883 0x5768bd0 0 iAd -[ADDistributedMessagingCenter messagePort:receivedMessage:withData:] 

另外bannerViewDidLoadAd代码;

- (void)bannerViewDidLoadAd:(ADBannerView *)banner 
{ 
    if (!bannerIsVisible) 
    { 
     [UIView beginAnimations:@"animateAdBannerOn" context:NULL]; 
     // assumes the banner view is offset -50 pixels so that it is not visible. 
     banner.frame = CGRectOffset(banner.frame, 0, -50); // if the banner is on top of the screen use 50 
     [UIView commitAnimations]; 
     bannerIsVisible = YES; 
    } 
} 

请帮我解决这个问题。谢谢。

+1

你没有附加任何代码:)试着打开NSZombieEnabled,可能你调用的对象是'nil',但很难说没有代码位。 –

+0

检查您正在调用此方法的地方,bannerViewDidLoadAd :.在这些地方添加断点并尝试调试您的代码。 – Robin

+0

我已经添加了NSZombie消息....只是要添加,我有一个列表和详细控制器(它有iAd)....当我尝试从详细信息移动到列表视图时,我得到了很少的消息。 。 – testndtv

回答

1

基本上你打电话bannerViewDidLoadAd:与错误的对象类型。看来你正在使用某种调度机制来做到这一点。当您为该方法设置调度请求时,或者您未能保留该对象并将其删除并替换为NSType对象时,您指定了错误的对象。

因此,找到bannerViewDidLoadAd:在您的代码中提及并确保与它一起使用的对象是正确的,并被适当保留。

+0

我已经添加了代码,其中使用了bannerViewDidLoad ... – testndtv

+0

我已将代码添加到我的原来的问题.. – testndtv

+0

@testndtv - 不,你没有。 –

0

bannerViewDidLoad在代理被释放后被调用,因此是僵尸消息。

我猜想这意味着你的广告没有被释放,并且在你的控制器不在的时候,你的广告仍然存在。

+0

嗨... thx很多...那么我该怎么做才能解决这个问题,或者我该如何确保广告被发布? – testndtv

+0

在你的视图控制器的dealloc方法中,只需放入[banner release] – Randall

+0

实际上,我在viewDidLoad中拥有/ local里面的横幅代码....我应该将它作为插座还是其他东西移动...如果你可以提供有关实施的其他详细信息... – testndtv