FYI Я программирую в объективе-C, но любой может помочь. Я сижу здесь в течение последних двух часов, пытаясь понять, в чем проблема, и я сделал все, что знаю, чтобы отладить эту простую проблему с небольшим кодированием. Проверьте код ниже, и я объясню. В приложении он начинается с MainScreenViewController. Мое приложение предоставляет пользователю два варианта: выберите «мастер» или кнопку «рабочий» (базовая модель клиент-сервер). Исходя из выбора пользователя, приложение должно загрузить другое представление (либо MasterViewController, либо WorkerViewController). Теперь, когда я запускаю приложение, если вы следовали командам печати и гипотетически выбирали «главную» кнопку, то в моей программе она выводит «masterButtonPressed - Stage 1» и «masterButtonPressed - Stage 2», но больше ничего. Представление не меняет ни того, что говорит о том, что проблема лежит в коде в разделе AppDelegate. После того, как я разместил там команды печати и запустил приложение, он все равно не печатает два оператора, которые у меня есть в разделе AppDelegate. У меня есть правильные операторы #import в правильных файлах, я просто не включил их здесь, потому что это занимает бесполезное пространство. Я могу скомпилировать код без ошибок и без предупреждений. Теоретически, что я должен видеть на консоли, четыре строки, когда я нажимаю кнопку «мастер», и они (по порядку) - «masterButtonPressed - Stage 1», «changeToMaster - Stage 1», «changeToMaster - Stage 2», и "masterButtonPressed - Stage 2". Может кто-то указать, где я ошибся? Как я уже сказал, представление никогда не меняется, когда нажимает кнопку «мастер». Спасибо за вашу помощь!Логическая ошибка или моя программа пропускает части?
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
Извините, вы все объяснили, и все это имеет смысл, но у меня есть один вопрос ... на каком представлении вы ссылаетесь, когда говорите «после добавления этого вида в свое окно?» Вы говорите об этом после того, как я добавлю представление mainScreenViewController в окно, а затем объявим его как делегата? –
Что я имел в виду: после запуска '[window addSubview: mainScreenViewController.view]' вы сделали бы что-то вроде 'mainScreenViewController.delegate = self'. Затем внутри вашего экземпляра MainScreenViewController вы можете напрямую вызвать [self.delegate changeToWorker] 'и т. Д. – pix0r