iOS:从另一个文件导入调用问题

时间:2012-03-19 00:37:33

标签: objective-c ios xcode mopub

我还是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,destroy banner和refresh ad都在MoPubManager文件中,因此您可以看到我导入了文件并将MoPubManager转换为对象。 (obj.adView最初只是MoPubManager.h中的_adView,但我不得不将其切换到obj.adView以避免警告。)我可能只是使用了错误的调用,我会发布MoPubManager.mm文件,其中调用最初是但它整整一两页

3 个答案:

答案 0 :(得分:1)

在行中:

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

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

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

但是,在sharedManager上调用destroyBanner方法...表示正在使用的单例模式。因此,您不应该创建新实例,因为这违反了使用单例的原因。 (使用单例时,您只有一个类的实例 - 请参阅this for more info

如果没有看到更多代码,您似乎应该调用类似的内容:

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

答案 1 :(得分:1)

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

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

if( [MoPubManager sharedManager].adView ) {

    [[MoPubManager sharedManager] destroyBanner];
}
[[MoPubManager sharedManager].adView refreshAd];

答案 2 :(得分:1)

您没有正确使用单身人士模式。

试试这个,也许会帮到你

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

    MoPubManager *obj = [MoPubManager sharedManager];

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