2012-09-24 14 views
17

Monotouchを6にアップグレードしましたが、今度はアプリケーションが起動しません。以前は問題なく動作していました。今度は、Main.csファイルに例外(以下に記載)がスローされます。 Xamarinのトラブルシューティングのヒントを調べましたが、問題は解決しませんでした。私はnibファイルを再レイアウトし、私のアウトレットを取り外して再構成し、それが問題を解決するかどうかを確認する全く新しいペン先を作成しました。他の誰かが考えを持っていますか? LoginView.designer.csからキーコード値に準拠していません(Monotouch and iOS 6)

MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown. Name: NSUnknownKeyException Reason: [<UIApplication 0xc84bb10> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key btnNewAccount. 
    at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) 
    at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 
    at Pokr.Application.Main (System.String[] args) [0x00000] in /Users/James/Projects/App/Main.cs:17 

コード:Main.csから

[Register ("LoginView")] 
partial class LoginView 
{ 
    [Outlet] 
    MonoTouch.UIKit.UIImageView imgLogo { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UITextField txtEmail { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UITextField txtPassword { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UIButton btnLogin { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UIButton btnNewAccount { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UILabel lblSecurityNotice { get; set; } 

    [Outlet] 
    MonoTouch.UIKit.UIImageView imgKeyboardBorder { get; set; } 

    void ReleaseDesignerOutlets() 
    { 
     if (imgLogo != null) { 
      imgLogo.Dispose(); 
      imgLogo = null; 
     } 

     if (txtEmail != null) { 
      txtEmail.Dispose(); 
      txtEmail = null; 
     } 

     if (txtPassword != null) { 
      txtPassword.Dispose(); 
      txtPassword = null; 
     } 

     if (btnLogin != null) { 
      btnLogin.Dispose(); 
      btnLogin = null; 
     } 

     if (btnNewAccount != null) { 
      btnNewAccount.Dispose(); 
      btnNewAccount = null; 
     } 

     if (lblSecurityNotice != null) { 
      lblSecurityNotice.Dispose(); 
      lblSecurityNotice = null; 
     } 

     if (imgKeyboardBorder != null) { 
      imgKeyboardBorder.Dispose(); 
      imgKeyboardBorder = null; 
     } 
    } 

コード(コードブレーク):ここで

static void Main (string[] args) 
    { 
     UIApplication.Main (args, null, "AppDelegate"); 
    } 

は私AppDelegateどこからの抜粋です私はViewControllerを呼び出します:

 var rootNavigationController = new UINavigationController(); 

     LoginView loginScreen = new LoginView(); 
     rootNavigationController.PushViewController(loginScreen, false); 

     this.window.RootViewController = rootNavigationController; 

     //blank function fires so the getter will init the singleton. 
     Singleton.Instance.Initialize(); 

     // make the window visible 
     window.MakeKeyAndVisible(); 


     return true; 
+0

可能であれば、より多くのコードが必要です。 – fuzz

+0

いくつかのコードを追加しました。デザイナーが生成したコードだけです。しかし、それはデザイナーが何を同期しているかのアイデアを与えるはずです。私が言ったように、それはアップグレードする前に働いた。ですから、Monotouch /バグを開発するのが好きです。 – jamesbar2

答えて

18

ViewControllerをコードで初期化しただけでなく、ViewControllerをXIBファイルから初期化した場合に発生します。

「メインインターフェイス」の値をコードで作成するViewControllerに設定した場合に発生します。この問題を解決するには、この値を空にすると、ViewControllerは自動的に初期化されません。

また、pInfoファイルでメインインターフェイスが設定されているかどうかを確認してください。 'Options'を選択し、'iOS Project'(セクション'iPad Deployment info')下Xamarin Studioで

右クリックプロジェクト(V.4):Xamarinユーザーのために、このヒントを提供するための@Bart

感謝。ドロップダウン'Main Interface'をクリアしてください。問題が解決するはずです。

+2

これは修正済みです!本当にありがとう。私のアプリケーション設定では、メインインターフェイスが定義されていました。 – jamesbar2

+2

ありがとう!同じです:Xamarin Studio(v.4)のプロジェクトを右クリックして 'オプション'を選択し、次に 'iOSプロジェクト'( 'iPad導入情報'セクション)のドロップダウン 'メインインターフェース'をクリアして解決しなければなりませんでした。 – Bart

3

それは理由を教えている:[<UIApplication 0xc84bb10> setValue:forUndefinedKey:]。それは言わないことに注意してください:[<LoginView 0xc84bb10> setValue:forUndefinedKey:]。ここで、メッセージ-setBtnNewAccount:をUIApplicationのインスタンスに送信しようとしていることを理解する必要があります。

デリゲートが間違って設定されているようです。

+0

Hmm。デリゲートがデザイナー/モノから割り当てられて以来、間違って設定されているかどうかはわかりません。私はそれに気付きますが、なぜアプリケーションのルートで、コントローラではないのか混乱しています。おそらくiOS 6の機能の呼び出し方法が変わったのでしょうか? – jamesbar2

2

アウトレットをボタンから作成することで同様の問題が発生し、それらを削除してアウトレットを作成しました。 XCodeとXamarinとの間の同期が正しい方法で完全に行われていなかった...

ボタンを削除し、デザイナーファイル内のすべての参照を手動で検索して削除するように修正しました。このことができます

希望...

1

は私もXamarin Studioの(5.9.5)の最新のビルドでで、この問題に直面しました。 「Xcodeと同期」オプションはグレー表示されていましたが、TamarinのViewController xibファイルはXcodeと同期していませんでした。

修正はHutjepowerの記述と同じでした。私はXamarin Studio内で壊れた参照を検索し、Xamarin内でxibファイルを開き(ファイルを右クリックしてソースコードエディタを使用して)、Xcodeから削除したコントロールを削除しました。それがこの問題を修正しました。

1

私はXamarin Studio 5.10.1でもこの問題が発生しています。私は最終的に私は私のストーリーボードファイルを編集するテキストエディタを使用して

<connections></connections> 

ですべてを削除した場合、それは私のために問題を修正することを発見しました。

関連する問題