FYI私はobjective-Cでプログラミングしていますが、誰でも手伝うことができます。私は過去2時間、ここに座って問題の原因を突き止めようとしています。この簡単なコーディングの問題をデバッグするために私が知っているすべてのことをやっています。以下のコードをチェックして説明します。このアプリケーションでは、MainScreenViewControllerで始まります。私のアプリケーションは、ユーザーに2つの選択肢を提供します。「マスター」ボタンまたは「ワーカー」ボタン(基本的なクライアント/サーバーモデル)を選択します。ユーザーの選択に基づいて、アプリケーションは別のビュー(MasterViewControllerまたはWorkerViewController)をロードすることになっています。今、私がアプリケーションを実行すると、あなたが印刷コマンドをたどって "マスタ"ボタンを選択した場合、私のプログラムでは "masterButtonPressed - Stage 1"と "masterButtonPressed - Stage 2"が印刷されます。ビューはAppDelegateセクションのコード内に問題があることを示すどちらも変化しません。そこに印刷コマンドを入れてアプリケーションを実行すると、AppDelegateセクションにある2つのステートメントは印刷されません。私は正しいファイルに正しい#importステートメントを持っていますが、それは無駄なスペースを占めるため、ここにはそれらを含めていません。私は、エラーも警告もなくコードをコンパイルすることができます。理論的には、私がコンソールで見なければならないものは、「マスター」ボタンを押したときに4行あり、「masterButtonPressed - ステージ1」、「changeToMaster - ステージ1」、「changeToMaster - ステージ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
申し訳ありませんが、すべてのことを説明してくれて意味がありますが、私は1つの質問があります。 mainScreenViewControllerビューをウィンドウに追加した後、デリゲートとして宣言していますか? –
私が言ったのは、 '[window addSubview:mainScreenViewController.view]を実行した後、' mainScreenViewController.delegate = self'のようなことをするでしょう。 MainScreenViewControllerインスタンスの内部では、[self.delegate changeToWorker] 'などを直接呼び出すことができます。 – pix0r