如何使用我的应用委托

Posted

技术标签:

【中文标题】如何使用我的应用委托【英文标题】:How do I use my app delegate 【发布时间】:2014-07-21 20:38:57 【问题描述】:

我有一个名为“pauseGame:”的方法可以暂停游戏,还有一个名为“resumeGame:”的方法 我想知道如何在我的应用程序委托中调用这些我尝试了几种方法,但在我的调试器中它最终显示“pauseGame:找不到方法”并且我导入了我的类,我将它们声明到我试图计算的应用程序委托中看看我该如何解决这个问题。

这是我使用的代码:

- (void)applicationWillResignActive:(UIApplication *)application 

    [BPGameController pauseGame:]; 


- (void)applicationDidEnterBackground:(UIApplication *)application 

    [BPGameController pauseGame:]; 


- (void)applicationDidBecomeActive:(UIApplication *)application 

    [BPGameController resumeGame:]; 

【问题讨论】:

你能输入你的代码吗?所以,我可以追溯代码 - (void)applicationWillResignActive:(UIApplication *)application [BPGameController pauseGame:]; - (void)applicationDidEnterBackground:(UIApplication *)application [BPGameController pauseGame:]; - (void)applicationDidBecomeActive:(UIApplication *)application [BPGameController resumeGame:]; 【参考方案1】:

试试这个。并确保方法 resumeGame 工作正常。

 - (void)applicationDidBecomeActive:(UIApplication *)application  

    [super applicationDidBecomeActive:application];

    [BPGameController resumeGame:]; 

    

【讨论】:

它说“'UIResponder' 没有可见的@interface 声明选择器'applicationDidBecomeActive:' 第二行仍然显示“预期的表达” 我可以看看你的 pauseGame 和 resumeGame 方法吗? - (IBAction)pauseGame:(id)sender [greenTimer invalidate]; - (IBAction)resumeGame:(id)sender greenTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(greenBlocksMoving) userInfo:nil repeats:YES]; 【参考方案2】:

如果 resumeGame 不带任何参数,它应该只是

 [BPGameController resumeGame]; 

输掉“:”

【讨论】:

【参考方案3】:

您的暂停/恢复方法是类方法还是实例方法,在您的代码示例中,您似乎将它们称为类方法。你能发布更具体的代码吗?

签名会有所帮助。

如果这些方法是实例方法,您可以将属性添加到YourAppDelegate,它可能如下所示:

@property (nonatomic, strong) BPGameController *bpgc;

然后当您在其他地方实例化 BPGameController 时,通过执行将其设置在 appdelegate 上

[(*YourAppDelegate)[[UIApplication sharedApplication] delegate] setBpgc:yourBPGC];

然后在应用代理方法中,您可以通过self.bpgc 引用您的bpgc 并发送pauseGame 等消息。

【讨论】:

我的暂停/恢复方法是我的 BPGameController 类的实例方法,我试图在我的 appDelegate 中使用它们 我如何将它们称为实例方法? BPGameController *svc = [[BPGameController alloc] init]; [svc pauseGame:(id)];我尝试使用它来调用实例方法,但它仍然显示“预期表达式” 要么: 1. 如果它们不依赖任何实例数据,则将它们更改为类方法。 2. 以某种方式将 BPGameController 的实例传递给您的AppDelegate,然后在其上调用实例方法。如果你 alloc init 另一个它不起作用,因为它在 BPGameController 的新实例上运行,这不是你想要的。 你知道如何将 BPGameController 的实例传递给我的应用程序委托,我能想到的唯一方法是 alloc init,但你说这不是我想要的【参考方案4】:

首先您的代码在语法上不正确。AS

 [BPGameController pauseGame:]; //do not call pauseGame: wihout any parameter.

如果您没有任何价值,请考虑使用 nil 调用它

   [BPGameController pauseGame:nil];

或 如果你的函数不需要参数而不是从方法定义中删除。

其次,我怀疑您没有在 .h 文件中声明 pauseGame:

.h文件中声明。如果没有

第三,如果你想以这种方式调用pauseGame[BPGameController pauseGame:nil];,那么你的方法定义应该以+而不是-开头。

  +(void)pauseGame:(id)param
  

如果您发布pauseGame: 的定义,它将有更多帮助

编辑:使用

- (void)applicationWillResignActive:(UIApplication *)application 

     UIViewController *controller = self.window.rootViewController;

     if([controller isKindOfClass:[UINavigationController class]])
           BPGameController *bpGameController;

            for (id vc in [((UINavigationController*)controller) viewControllers])
             
                 if ([vc isKindOfClass:[BPGameController class]])
                 
                     [((BPGameController *) vc) pauseGame];
                     break;
                 
             
     
     else if([controller isKindOfClass:[BPGameController class]])
             [((BPGameController *) controller) pauseGame];

     else
        //Not found
     

【讨论】:

我只是尝试将其更改为类方法,但后来我的所有计时器都不起作用 - (IBAction)pauseGame [greenTimer invalidate];

以上是关于如何使用我的应用委托的主要内容,如果未能解决你的问题,请参考以下文章

如何从应用程序委托、情节提要、iOS6 获取我的视图控制器的实例

如何弱链接 iOS 应用程序委托方法?

如何通过应用程序委托使用托管对象上下文实例化还原的视图控制器?

如何使用委托从数据源中删除对象

如何在 Swift Flutter 插件中接收应用程序委托调用?

如何从视图控制器调用所有方法和函数到应用程序委托?