0

仅供参考,我正在使用 Objective-C 编程,但任何人都可以提供帮助。在过去的两个小时里,我一直坐在这里试图找出问题所在,并且我已经尽我所能来调试这个简单的小编码问题。查看下面的代码,我会解释。在应用程序中,它从 MainScreenViewController 开始。我的应用程序为用户提供了两种选择……选择“主”按钮或“工作”按钮(基本客户端-服务器模型)。根据用户的选择,应用程序应该加载另一个视图(MasterViewController 或 WorkerViewController)。现在,当我运行应用程序时,如果您遵循打印命令并假设选择“主”按钮,那么在我的程序中,它会打印出“masterButtonPressed - Stage 1”和“ 出错了吗?就像我说的,当按下“主”按钮时,视图永远不会改变。谢谢你的帮助!

MainScreenViewController.h

@interface MainScreenViewController : UIViewController {

}

-(IBAction)masterButtonPressed;
-(IBAction)workerButtonPressed;
@end

MainScreenViewController.m

@implementation MainScreenViewController
-(IBAction)masterButtonPressed {
    NSLog(@"masterButtonPressed - Stage 1");
    [ErwinAppDelegate changeToMaster];
    NSLog(@"masterButtonPressed - Stage 2");
    }


-(IBAction)workerButtonPressed {
    NSLog(@"workerButtonPressed - Stage 1");
    [ErwinAppDelegate changeToWorker];
    NSLog(@"workerButtonPressed - Stage 2");
}
@end

ErwinAppDelegate.h

@class MainScreenViewController, MasterViewController, WorkerViewController;
@interface ErwinAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    MainScreenViewController *mainScreenViewController;
    MasterViewController *masterViewController;
    WorkerViewController *workerViewController;
}

@property(nonatomic, retain) IBOutlet UIWindow *window;
@property(nonatomic, retain) IBOutlet MainScreenViewController *mainScreenViewController;
@property(nonatomic, retain) IBOutlet MasterViewController *masterViewController;
@property(nonatomic, retain) IBOutlet WorkerViewController *workerViewController;

-(void)changeToMaster;
-(void)changeToWorker;

@end

ErwinAppDelegate.m

@implementation ErwinAppDelegate

@synthesize window, mainScreenViewController, masterViewController, workerViewController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after application launch
    [window addSubview:mainScreenViewController.view];
    [window addSubview:masterViewController.view];
    [window addSubview:workerViewController.view];
    [window makeKeyAndVisible];

    // Bring first view up front
    [window bringSubviewToFront:mainScreenViewController.view];
}


-(void)changeToMaster {
    NSLog(@"changeToMaster - Stage 1");
    [window bringSubviewToFront:masterViewController.view];
    NSLog(@"changeToMaster - Stage 2");
}


-(void)changeToWorker {
    NSLog(@"changeToWorker - Stage 1");
    [window bringSubviewToFront:workerViewController.view];
    NSLog(@"changeToWorker - Stage 2");
}
@end
4

2 回答 2

2

看起来您正在尝试调用类方法:+[ErwinAppDelegate changeToMaster]虽然您已将其声明为实例方法。您需要在 MainViewController 中保留对应用程序委托对象的引用 - 目前您只处理静态(类)方法。

做到这一点的“正确”方法是在 MainScreenViewController 中创建一个委托协议,然后在 ErwinAppDelegate 中将该视图添加到您的窗口后,设置mainScreenViewController.delegate = self.

以下是有关创建和使用委托的一些非常有用的信息:如何在 Objective-C 中创建委托?

于 2009-07-09T03:19:59.193 回答
0

只是一个猜测,但您可能希望您的 ErwinAppDelegate 实例将消息发送到...

应该有一些 ErwinAppDelegate eadeleg;[eadeleg changeToMaster]; 不?

于 2009-07-09T03:20:16.743 回答