【问题标题】:iOS: Issue Importing Calls From Another FileiOS:从另一个文件导入调用的问题
【发布时间】:2012-03-19 00:37:33
【问题描述】:

我还是 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 sharedManager] .. 使用单例设计模式?
  • @Malek_Jundi 我不确定,抱歉我还是很陌生。
  • 我的意思是在 shareManager 中你定义了一个静态对象吗?最好向我们展示您在 shareManager 中所做的事情,以便我们为您提供帮助。

标签: objective-c ios xcode mopub


【解决方案1】:

行内:

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

您正在创建 MoPubManager 类的实例。

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

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

没有看到更多代码,您似乎应该调用以下代码:

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

【讨论】:

    【解决方案2】:

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

    MoPubManager *obj = [[MoPubManager alloc] init];
    
    if( [MoPubManager sharedManager].adView ) {
    
        [[MoPubManager sharedManager] destroyBanner];
    }
    [[MoPubManager sharedManager].adView refreshAd];
    

    【讨论】:

      【解决方案3】:

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

      试试这个,也许对你有帮助

      - (void)applicationWillEnterForeground:(UIApplication *)application
      {
      
          MoPubManager *obj = [MoPubManager sharedManager];
      
          if( obj.adView ) {
              [obj destroyBanner];
          }
          [obj.adView refreshAd];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-10
        相关资源
        最近更新 更多