2011-01-05 5 views
2

私たちは普遍的なアプリケーションを持っていて、iOSフレームワークが私たちのメソッドを読み込もうとしているランダムなエラーのように見えます。そこで、クラッシュの一部とそのコードを示します。私が言ったように、すべてのランダムなようです。それは、アプリのランダムな場所で、ランダムな時間にiPhoneやiPadで発生します。iOS不良セレクタエラー

[__NSCFDictionary bannerViewDidLoadAd:]: unrecognized selector sent to instance 0x1f3f30

[__NSArrayM bannerViewDidLoadAd:]: unrecognized selector sent to instance 0x195ea0

[UILabel bannerView:didFailToReceiveAdWithError:]: unrecognized selector sent to instance 0x19f950

[ADSession bannerViewDidLoadAd:]: unrecognized selector sent to instance 0x106e20

[__NSArrayM bannerView:didFailToReceiveAdWithError:]: unrecognized selector sent to instance 0x521b670

ここでは参照するコードを示します。何らかの理由で...

- (void)bannerViewDidLoadAd:(ADBannerView *)banner { 
    if (!_adBannerViewIsVisible) {     
     _adBannerViewIsVisible = YES; 
     [self fixupAdView:[UIDevice currentDevice].orientation]; 
     NSLog(@"iAD Loaded"); 
    } 
} 

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { 

    NSLog(@"%@",error); 

    if (_adBannerViewIsVisible) 
    {   
     _adBannerViewIsVisible = NO; 
     [self fixupAdView:[UIDevice currentDevice].orientation]; 
     NSLog(@"iAD Unloaded"); 

    } 
} 

編集:私たちはこれを絞り込んだと思います。あなたはここで眩しい問題を見ることができますか?

- (void)createAdBannerView { 
    Class classAdBannerView = NSClassFromString(@"ADBannerView"); 
    if (classAdBannerView != nil) { 
     [classAdBannerView release]; 
     [self.adBannerView release]; 
     self.adBannerView = [[classAdBannerView alloc] initWithFrame:CGRectZero]; 
     [_adBannerView setRequiredContentSizeIdentifiers:[NSSet setWithObjects: ADBannerContentSizeIdentifierPortrait, ADBannerContentSizeIdentifierLandscape, nil]]; 
     if (UIInterfaceOrientationIsLandscape([UIDevice currentDevice].orientation)) { 
      [_adBannerView setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifierLandscape]; 
     } else { 
      [_adBannerView setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifierPortrait];    
     } 
     [_adBannerView setFrame:CGRectOffset([_adBannerView frame], 0, -[self getBannerHeight])]; 
     [_adBannerView setDelegate:self]; 

     [self.view addSubview:_adBannerView];   
    } 
} 

- (void)fixupAdView:(UIInterfaceOrientation)toInterfaceOrientation { 
    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"isadFreeUpgradePurchased"]) { 
     if (_adBannerView != nil) {   
      if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) { 
       [_adBannerView setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifierLandscape]; 
      } else { 
       [_adBannerView setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifierPortrait]; 
      }   
      [UIView beginAnimations:@"fixupViews" context:nil]; 
      if (_adBannerViewIsVisible) { 
       CGRect adBannerViewFrame = [_adBannerView frame]; 
       adBannerViewFrame.origin.x = 0; 
       adBannerViewFrame.origin.y = 0; 
       [_adBannerView setFrame:adBannerViewFrame]; 
       CGRect contentViewFrame = _contentView.frame; 
       contentViewFrame.origin.y = [self getBannerHeight:toInterfaceOrientation]; 
       contentViewFrame.size.height = self.view.frame.size.height - [self getBannerHeight:toInterfaceOrientation]; 
       _contentView.frame = contentViewFrame; 
      } else { 
       CGRect adBannerViewFrame = [_adBannerView frame]; 
       adBannerViewFrame.origin.x = 0; 
       adBannerViewFrame.origin.y = -[self getBannerHeight:toInterfaceOrientation]; 
       [_adBannerView setFrame:adBannerViewFrame]; 
       CGRect contentViewFrame = _contentView.frame; 
       contentViewFrame.origin.y = 0; 
       contentViewFrame.size.height = self.view.frame.size.height; 
       _contentView.frame = contentViewFrame;    
      } 
      [UIView commitAnimations]; 
     } 
    } 
} 

答えて

4

it seems like random iOS frameworks are trying to load our methods

あなたは後方にそれを持って、あなたはランダムなフレームワークオブジェクトにそれらのメッセージを送っています。これはほとんどの場合、割り当てられていないオブジェクトへのポインタがあり、そのオブジェクトにメッセージを送信しようとする試みが、同じメモリアドレスの新しいオブジェクトに送信されるという兆候です。

これらのメソッドを含むクラスのユーザーを探し、解放されたインスタンスにアクセスしようとしている場所を特定する必要があります。

+0

あなたが右の原因についての音を言っている私はちょっとリーク十字軍に行って、リリースしていること何か問題でも。しかし、私はそれを探す方法を本当に知りません。私はどこに問題があるかもしれないと思うところで投稿を編集しました。 –

+1

すぐには問題は見られませんが、あまり意味はありません。割り当て解除されたインスタンスに送信されたメッセージを見つけるには、NSZombieを有効にしてアプリをデバッグしてください(http://stackoverflow.com/questions/1211923/how-to-use-nszombie-in-xcode)。 ADBannerViewDelegateを使用しているビューがまだ存在している間にADBannerViewDelegateを解放できるかどうかを検討してください。 – Jonah

0

このメソッドを持たないオブジェクトにメッセージを送信しようとすると、「インスタンスに送信されたセレクタが認識されません」というメッセージが表示されます。

たとえば、NSDictionaryにはbannerViewDidLoadAdメソッドはありませんが、ADBannerViewはおそらくそうです。だから間違ったオブジェクトを渡しているだけです。 エラーの行にブレークポイントを置き、そのオブジェクトの元の場所を確認するだけです。

(ただの推測:多分あなたには、いくつかの辞書/配列を反復している?、辞書や配列が何かを含めることができるため)

関連する問題