在AppDelegate中调用一个函数?

Vol*_*ort 5 objective-c cocos2d-iphone

在Cocos2d中的UITextField示例的解决方案(实际上是最高投票的答案)后,我设法做到了除了线路

[[[UIApplication sharedApplication] delegate] specifyStartLevel];
Run Code Online (Sandbox Code Playgroud)

我把它放在我的场景中,我收到了这个警告:

未找到实例方法'-specifyStartLevel'(返回类型默认为'id')

这是为什么?我清楚地-specifyStartLevel在我的AppDelegate的标题和实现中定义了...


编辑:specifiedStartLevel的声明

#import <UIKit/UIKit.h>

@class RootViewController;

@interface AppDelegate : NSObject <UIApplicationDelegate,UITextFieldDelegate> {
    UIWindow            *window;
    UITextField *levelEntryTextField;
    RootViewController  *viewController;
}
- (void)specifyStartLevel;
@property (nonatomic, retain) UIWindow *window;

@end
Run Code Online (Sandbox Code Playgroud)

并实施:

- (void)specifyStartLevel
{
    [levelEntryTextField setText:@""];
    [window addSubview:levelEntryTextField];
    [levelEntryTextField becomeFirstResponder];    
}
Run Code Online (Sandbox Code Playgroud)

sud*_*-rf 15

现在,你的班级对你的委托方法一无所知.您需要将您的委托导入您的实现,而不是您的界面(以避免循环导入).

例如,

#import "AppDelegate.h"
Run Code Online (Sandbox Code Playgroud)

然后,您应该将嵌套方法调用中返回的委托强制转换为委托类型.例如:

[(AppDelegate *)[[UIApplication sharedApplication] delegate] specifyStartLevel];
Run Code Online (Sandbox Code Playgroud)


小智 5

  1. AppDelegate.h文件中添加您的方法,例如:

    - (void)Welcome
    
    Run Code Online (Sandbox Code Playgroud)
  2. AppDelegate.m文件中实现方法,例如:

     - (void)Welcome
     {
         NSLog(@"Welcome")
    
     }
    
    Run Code Online (Sandbox Code Playgroud)
  3. UIApplication在方法中设置委托,例如:

    AppDelegate *appDelegate=[UIApplication sharedApplication] delegate];
    
    [appDelegate Welcome];
    
    Run Code Online (Sandbox Code Playgroud)