ビューコントローラを解放できません/原因EXC_BAD_ACCESS

私はこれが変だと思いますが、同じコードが他のアプリケーションでうまく動作していたので、私はiPhoneデベロッパーの中で私の関数をオーバーライドしています。

       * .appdelegate_iPhone.h *
        @interface AppDelegate_iPhone : AppDelegate 
        {

        }

        @end

    * .appdelegate_iPhone.m *
........

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
        {
          LoginViewController_iPhone * login_view = [[LoginViewController_iPhone alloc] initWithNibName:@"LoginViewController_iPhone" bundle:nil];
                [super.window addSubview:login_view.view];
                [super.window makeKeyAndVisible];
               //[login_view release];


           //Override point for customization after application launch.
            [self.window makeKeyAndVisible];
            return YES;

        }
......
@end

あなたは、私がオブジェクトを解放してリリースしなければ、後でIBoutlet UIFieldを制御することができないので、私はlogin_viewのリリースをコメントアウトしたことがわかります。

私はlogin_viewを解放し、UITextField.textを使用しようとすると、exc_bad_accessエラーが出ます

0
あなたはlogin_viewをどこで初期化しますか?
追加された 著者 JBRWilkinson,
LoginViewController_iPhone * login_view = [[LoginViewController_iPhone alloc] initWithNibName:@ "LoginViewController_iPhone"バンドル:nil];同じエラーが発生します。
追加された 著者 Amrit,

2 答え

まず、組み込みのテンプレートとそのnibファイルを使用すると、これはずっと簡単になります。このように構築するのではなく、そのことを強くお勧めします。つまり、何が起こっているのか話しましょう。

ビューコントローラを作成してから、ビューを取り出してウィンドウに配置します。次に、正しく割り当てを解除するView Controllerをスローします。私は UITextField.text をどこで呼び出すのかはわかりませんが、このメソッドが完了するまでには、View Controllerはなくてはなりません。 View Controllerを保持したい場合は、それをivarに配置する必要があります。

@Cyupaが指摘しているように、ここでは super.window を使用すべきではありません。 self.window を使用する必要がありますが、できればテンプレートの1つを使用するのが理想的です。

0
追加された
私は、このクラスがUIWindowを持っていないので、なぜ私がなぜsuper.windowを使用するのか、self.windowを使用しないのかを説明するコードを更新しました。 iPhoneとiPadの普遍的なappdelegateであるスーパークラス(appDelegate)は、このiPhone_delegateクラスから呼び出すUIWindowを持っています。
追加された 著者 Amrit,
私のLoginViewControllerはこの code @interfaceのようなものです。LoginViewController_iPhone:UIViewController {IBOutlet UITextField * usernameField; }
追加された 著者 Amrit,

ビューコントローラを初期化していません。ビューコントローラのiOS割り当て領域が初期化されていません。

LoginViewController_iPhone * login_view  = [[LoginViewController_iPhone alloc] init];

そしてなぜあなたは [super.window addSubview:login_view.view];   [window addSubview:login_view.view]; ではなく、

あなたのappDelegateのスーパーは NSObject には、ウィンドウプロパティはありません。

0
追加された
私はそれをコードとして初期化しています。LoginViewController_iPhone * login_view = [[LoginViewController_iPhone alloc] initWithNibName:@ "LoginViewController_iPhone" bundle:nil]; また、私はこのクラスのためのスーパーはNSOBjectではない、それは私がiPadとiPhoneデリゲートで継承しているMain delegateです
追加された 著者 Amrit,