0

我还是 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 文件发布到最初调用的位置但它有一整页或两页

4

3 回答 3

1

在行中:

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

您正在创建 MoPubManager 类的实例。

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

但是,在 sharedManager 上调用了 destroyBanner 方法...表明正在使用单例模式。因此,您不应该创建新实例,因为这与使用单例的原因背道而驰。(在使用单例时,您只有一个类的实例 - 请参阅此获取更多信息

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

if( [MoPubManager sharedManager].adView ) {
    [[MoPubManager sharedManager] destroyBanner];
}
[[MoPubManager sharedManager].adView refreshAd];
于 2012-03-21T15:58:29.277 回答
1

首先,MoPubManager 是什么子类...编译得很好?这里的问题似乎是您正在创建一个新的 MoPubManager 实例,但是您正在使用单例来销毁它,并且它们没有相同的引用。你应该使用不同的东西,比如:

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

if( [MoPubManager sharedManager].adView ) {

    [[MoPubManager sharedManager] destroyBanner];
}
[[MoPubManager sharedManager].adView refreshAd];
于 2012-03-21T15:59:57.070 回答
1

您没有正确使用单例模式。

试试这个,也许会帮助你

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

    MoPubManager *obj = [MoPubManager sharedManager];

    if( obj.adView ) {
        [obj destroyBanner];
    }
    [obj.adView refreshAd];
}
于 2012-03-21T16:00:54.883 回答