2012-03-19 43 views
0

我对Objective-C仍然很陌生,所以我对此很难接受。在我的AppController中,当用户点击我的应用程序中的一个广告时,关闭广告并返回到我的应用程序,我想销毁并重新创建广告(关于为什么)。出于某种原因,但我的代码无法正常工作。没有错误或警告,但它没有做我打算做的事。这是我的代码如下所示:iOS:问题导入来自另一个文件的呼叫

#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文件发布到最初的调用但它的一整页或两个

+1

[MoPubManager sharedManager] ..使用Singleton设计模式? – 2012-03-21 01:04:34

+0

@Malek_Jundi我不确定,对不起,我还是很新的。 – John 2012-03-21 01:35:41

+1

我的意思是在shareManager中你定义了一个静态对象吗?它更好地告诉我们你在做什么在shareManager中,所以我们可以帮助你。 – 2012-03-21 05:04:51

回答

1

在行:

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

您所创建的MoPubManager类的实例。

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

但是,正在sharedManager上调用destroyBanner方法...指示正在使用的单例模式。因此,你不应该创建一个新的实例,因为这违背了使用单例的原因。 (你永远只能有一个类的一个实例时,使用单 - 见this for more info

没有看到更多的代码,看来你应该调用类似:

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

非常感谢! – John 2012-03-22 04:08:39

1

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

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

if([MoPubManager sharedManager].adView) { 

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

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

试试这个,也许会帮助你

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

    MoPubManager *obj = [MoPubManager sharedManager]; 

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