私はiOSプログラミングに不慣れで、1つの問題で立ち往生しています。
何が行われたか:
iOSアプリケーションを作成しました。最初は、main.m、AppDelegate.h、AppDelegate.m、および通常作成されるその他のサポートファイル(コードを含まない)がありました。
次に、インターフェイス(LoginView.xib)を使用してXIBファイルを手動で作成し、LoginViewController.hとLoginViewController.mを手動で追加してXIBを制御しました。
LoginViewController.hにアウトレットを追加しました。
結局、ファイルの所有者クラス(LoginViewController)を設定し、XIBとLoginViewController.hの間に接続を確立しました。
問題の説明:
インスタンス化されたログインビューコントローラーを表示し、アプリケーションの起動時にすぐにログインビューを表示する必要があります。
私は何度か試みて、数十のフォーラムスレッドを読みましたが、方法はありませんでした。白いウィンドウの背景以外は何も表示されません。どうすれば修正できますか?
参照コード:
LoginViewController.h
#import <UIKit/UIKit.h>
@interface LoginViewController : UIViewController
{
IBOutlet UIView *_loginView;
IBOutlet UITextField *_tfLogin;
IBOutlet UITextField *_tfPassword;
IBOutlet UIButton *_btnLoginToSystem;
}
- (IBAction)attemptLogin:(id)sender;
@end
LoginViewController.m
#import "LoginViewController.h"
@interface LoginViewController ()
@end
@implementation LoginViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)attemptLogin:(id)sender
{
}
@end
AppDelegate.h
#import <UIKit/UIKit.h>
#import "LoginViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) LoginViewController *loginViewController;
@end
AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
self.loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil];
[self.window.rootViewController presentModalViewController:self.loginViewController animated:NO];
[self.window makeKeyAndVisible];
return YES;
}
アップデート!!!皆さん、ありがとうございました。別の問題を見つけました。コードが正しいことを承認したら(もちろん、適切なエディションの後)、シミュレーターを起動し、次の例外を除いてアプリがクラッシュすることを確認しました。
NSInternalInconsistencyException with the reason [UIViewController _loadViewFromNibNamed:bundle:] loaded the ... nib but the view outlet was not set.
StackOverflowのおかげで私はそれを修正しました。 ペン先をロードしましたが、ビューアウトレットが設定されていません-InterfaceBuilderの新機能
私がリンクを提供したトピックからのジョシュ・ジャスティスのコメントの引用:
- 問題の原因となるXIBファイルを開く
- 左側のバーにあるファイルの所有者アイコンをクリックします(上部のアイコンは黄色の枠で囲まれたボックスのように見えます)
- 右側のサイドバーが表示されない場合は、ツールバーの「表示」の上にある3番目のアイコンをクリックします。これにより、右側のサイドバーが表示されます
- 右側のサイドバーで、3番目のタブをクリックします。これは新聞のように見えます。
- 上部の[カスタムクラス]で、[クラス]がこのビューに対応するViewControllerの名前であることを確認します。そうでない場合は、入力してください
- 右側のサイドバーで、最後のタブをクリックします。これは、矢印の付いた円のように見えます。
- その下に「ビュー」が表示された「アウトレット」が表示されます。その横にある円を左側のバーの「表示」アイコンにドラッグします(下の円は、太い灰色の輪郭を持つ白い正方形のように見えます)
- xibを保存して再実行します
おそらく、この情報を1つのポイントに集約することで、他の新規参入者が私が通過した方法をより速く通過できるようになります。