无法从委托调用控制器方法

时间:2011-09-16 19:32:23

标签: iphone objective-c ios xcode

我正在尝试这样做:http://www.pushplay.net/2009/05/framework-for-having-multiple-views-in-an-iphone-app/

到目前为止,我已经有了这个结构:appDelegate - > rootViewController - > welcomeViewController

我的委托中有一个方法(doSomething),由welcomeViewController中的IBAction调用。它可以工作,我可以在doSomething中做一个NSlog,它显示在委托中调用该方法。

问题是当我在doSomething方法(在委托中)中运行[rootViewController loadNewView]之类的命令时,它什么都不做。它没有错误,它什么都不做。

我一直在阅读并看到协议和通知被建议,但我想知道为什么使用该委托的方法不起作用以及是否有任何方法可以修复它。

SurveyClientAppDelegate.h

@interface SurveyClientAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    RootViewController *rootViewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet RootViewController *rootViewController;

-(void)doSomething;

@end

SurveyClientAppDelegate.m

- (void)doSomething {
    NSLog(@"Attempt: rootViewController loadLocationList");
    [rootViewController loadLocationList];
}

RootViewController.h

@interface RootViewController : UIViewController {
    WelcomeViewController *welcomeView;
}

@property (nonatomic, retain) WelcomeViewController *welcomeView;
@property (nonatomic, retain) SurveyListViewController *surveyList;

-(void)loadLocationList;

RootViewController.m

- (void)loadLocationList
{
    NSLog(@"RootViewController: loadLocationList");
}

WelcomeViewController.h

@interface WelcomeViewController : UIViewController

-(IBAction)viewList:(id)sender;
-(void)loadLocationList;

WelcomeViewController.m

- (void)viewList:(id)sender
{
    SurveyClientAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    [appDelegate doSomething];
}

1 个答案:

答案 0 :(得分:0)

您是否在welcomeViewController中保留对rootViewContoller的引用?可以(并且可能)在您可以调用其上的方法之前释放rootViewController。

这是使用delegates的好时机。你提到在“委托中”调用一个方法,但是没有看到你的任何代码,很难判断你是否正确使用它。