FYI Je programme en objectif-C mais n'importe qui pourrait être en mesure d'aider. Je suis assis ici depuis deux heures essayant de comprendre quel est le problème et j'ai fait tout ce que je sais pour déboguer ce simple petit problème de codage. Découvrez le code ci-dessous et je vais vous expliquer. Dans l'application, il commence avec MainScreenViewController. Mon application donne à l'utilisateur deux choix ... choisir un bouton "maître" ou un bouton "travailleur" (modèle client-serveur de base). En fonction du choix de l'utilisateur, l'application est alors supposée charger une autre vue (MasterViewController ou WorkerViewController). Maintenant, quand je lance l'application, si vous avez suivi les commandes d'impression et hypothétiquement choisir le bouton "maître", alors dans mon programme, il imprime "masterButtonPressed - Stage 1" et "masterButtonPressed - Stage 2" mais rien d'autre. La vue ne change pas non plus ce qui m'indique que le problème réside dans le code dans la section AppDelegate. Après avoir placé les commandes d'impression et exécuté l'application, il n'imprime toujours pas les deux instructions que j'ai dans la section AppDelegate. J'ai les bonnes instructions # import dans les bons fichiers, je ne les ai pas inclus ici parce que cela prend de l'espace inutile. Je peux compiler le code sans erreur et sans avertissement. Théoriquement, ce que je devrais voir dans la console sont quatre lignes quand j'appuie sur le bouton "master" et elles sont (dans l'ordre) - "masterButtonPressed - Stage 1", "changeToMaster - Stage 1", "changeToMaster - Stage 2", et "masterButtonPressed - Étape 2". Quelqu'un peut-il indiquer où je me suis trompé? Comme je l'ai dit, la vue ne change jamais lorsque vous appuyez sur le bouton "maître". Merci de votre aide!Erreur logique ou mon programme ignore-t-il les pièces?
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
Je suis désolé, vous avez tout expliqué très bien et tout a un sens, mais j'ai une question ... de quelle vue parlez-vous quand vous dites "après avoir ajouté cette vue à votre fenêtre?" Parlez-vous après avoir ajouté la vue mainScreenViewController à la fenêtre, puis le déclarer en tant que délégué? –
Ce que je voulais dire, c'est qu'après avoir exécuté '[window addSubview: mainScreenViewController.view]' vous feriez quelque chose comme 'mainScreenViewController.delegate = self'. Ensuite, dans votre instance de MainScreenViewController, vous pouvez appeler directement [self.delegate changeToWorker], etc. – pix0r