我对Objective-C还是陌生的,因此我很难过。在我的AppController中,当用户单击我的应用程序中的一个广告,然后关闭广告并返回到我的应用程序时,我想销毁并重新创建广告(关于原因的详细说明)。但是由于某种原因,我的代码无法正常工作。没有错误或警告,但是它没有达到我的预期目的。这是我的代码如下所示:

#import "MoPubManager.h"

......

- (void)applicationWillEnterForeground:(UIApplication *)application
{

    MoPubManager *obj = [[MoPubManager alloc] init];

    if( obj.adView ) {
        [[MoPubManager sharedManager] destroyBanner];
    }
    [obj.adView refreshAd];

}


_adView,销毁横幅广告和刷新广告都在MoPubManager文件中,因此您可以看到我导入了文件并将MoPubManager转换为对象。 (obj.adView最初只是MoPubManager.h中的_adView,但为了避免警告,我不得不将其切换到obj.adView。)我可能只是使用了错误的调用,因此我会将MoPubManager.mm文件发布到调用最初所在的位置但整整两页

最佳答案

在该行中:

MoPubManager *obj = [[MoPubManager alloc] init];


您正在创建MoPubManager类的新实例。

接下来,您要检查该新实例化的类的adView属性是否不为nil。除非在MoPubManager的init方法中填充adView,否则它将始终为nil,因此不会调用destroyBanner方法。

但是,在sharedManager上调用destroyBanner方法...指示正在使用单例模式。因此,您不应创建新实例,因为这与使用单例的原因背道而驰。 (使用单例时,您只有一个类的实例-请参见this for more info

在没有看到更多代码的情况下,您似乎应该调用类似以下内容的代码:

if( [MoPubManager sharedManager].adView ) {
    [[MoPubManager sharedManager] destroyBanner];
}
[[MoPubManager sharedManager].adView refreshAd];

关于objective-c - iOS:从另一个文件导入调用时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9763657/

10-09 15:34