Search code examples
objective-ccocos2d-iphone

Call a function in AppDelegate?


Following the solution (the highest-voted answer actually) at UITextField Example in Cocos2d, I managed to do it except the line

[[[UIApplication sharedApplication] delegate] specifyStartLevel];

I have placed it in my scene, I get this warning:

Instance method '-specifyStartLevel' not found (return type defaults to 'id')

Why is that? I clearly have -specifyStartLevel defined in the header and implementation of my AppDelegate...


Edit: Declaration of specifyStartLevel

#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

And implementation:

- (void)specifyStartLevel
{
    [levelEntryTextField setText:@""];
    [window addSubview:levelEntryTextField];
    [levelEntryTextField becomeFirstResponder];    
}

Solution

  • Right now, your class doesn't know anything about your delegate's methods. You need to import your delegate into your implementation, not your interface (to avoid cycled imports).

    For example,

    #import "AppDelegate.h"
    

    Then you should cast the returned delegate in your nested method call to be your delegate type. For example:

    [(AppDelegate *)[[UIApplication sharedApplication] delegate] specifyStartLevel];