我还是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文件,其中调用最初是但它整整一两页
答案 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];
}