因此,我们有一个通用应用程序,并且遇到了一个奇怪的错误,似乎随机的iOS框架正在尝试加载我们的方法。因此,这里有一些崩溃和代码调用。就像我说的,似乎每一个随机。它发生在应用程序中随机的位置,并且随机发生在iPhone和iPad上。

[__NSCFDictionary bannerViewDidLoadAd:]:无法识别的选择器已发送到实例0x1f3f30

[__NSArrayM bannerViewDidLoadAd:]:无法识别的选择器已发送到实例0x195ea0

[UILabel bannerView:didFailToReceiveAdWithError:]:无法识别的选择器已发送到实例0x19f950

[ADSession bannerViewDidLoadAd:]:无法识别的选择器已发送到实例0x106e20

[__NSArrayM bannerView:didFailToReceiveAdWithError:]:无法识别的选择器已发送到实例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];
        }
    }
}

最佳答案

似乎随机的iOS框架正在尝试加载我们的方法

您已经倒退了,您正在将这些消息发送到随机框架对象。这几乎总是一个迹象,表明您有一个指向已释放对象的指针,而您尝试向该对象发送消息的尝试却被发送到了同一内存地址处的某个新对象。

您需要查找包含这些方法的类的用户,并确定您尝试在何处访问已发布的实例。

关于iphone - iOS错误的选择器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4600966/

10-10 20:24