2011-10-26 10 views
0

私はIB 3.xで作成されたXIBを持つソリューションを持っています。 xCode 4でそれらを編集して変更を保存すると、私のXibファイルはすべて乱され、何も表示されません。モノタッチ - xCodeへのトランジション4 - XIBが動作しない

おそらくプロジェクトが正しくアップグレードされませんでしたか? 誰かがアイデアを持っているなら、できるだけ早く私に教えてください - 私はXIBを編集できません!

セットアップ: 1. MTとMDが最新であることを再度確認しました。 2. ios 4.x用にコンパイルする 3.セットアップと解決策があれば、問題は100%再現可能です

これは前後のファイルです。それに続くのは、私が問題を作り出すために使った正確な手順です。

5 KBの制限があるため、ファイル全体を投稿できませんが、新しいXcode 4ファイルには完全なゲッターとセッターがあるということです。

**** ORIGINAL XCodeの3.xのコード:

// ----------------------------- -------------------------------------------------

// <autogenerated> 
//  This code was generated by a tool. 
//  Mono Runtime Version: 4.0.30319.1 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </autogenerated> 
// ------------------------------------------------------------------------------ 

namespace iPhoneSolution 
{ 
    // Base type probably should be MonoTouch.UIKit.UIViewController or subclass 
    [MonoTouch.Foundation.Register("NewTaskView")] 
    public partial class NewTaskView { 

    private MonoTouch.UIKit.UIView __mt_view; 

    private MonoTouch.UIKit.UIButton __mt_cmdAddRecipient; 

    private MonoTouch.UIKit.UIButton __mt_cmdPickDateTime; 

    private MonoTouch.UIKit.UITextView __mt_txtDescription; 

    private MonoTouch.UIKit.UITextField __mt_txtDueDat; 

    private MonoTouch.UIKit.UITextField __mt_txtName; 

    private MonoTouch.UIKit.UITextView __mt_txtRecipients; 

    private MonoTouch.UIKit.UIButton __mt_cmdDoneDescription; 

    private MonoTouch.UIKit.UIButton __mt_cmdSend; 

    #pragma warning disable 0169 
    [MonoTouch.Foundation.Connect("view")] 
    private MonoTouch.UIKit.UIView view { 
     get { 
      this.__mt_view = ((MonoTouch.UIKit.UIView)(this.GetNativeField("view"))); 
      return this.__mt_view; 
     } 
     set { 
      this.__mt_view = value; 
      this.SetNativeField("view", value); 
     } 
    } 

    [MonoTouch.Foundation.Connect("cmdAddRecipient")] 
    private MonoTouch.UIKit.UIButton cmdAddRecipient { 
     get { 
      this.__mt_cmdAddRecipient = ((MonoTouch.UIKit.UIButton)(this.GetNativeField("cmdAddRecipient"))); 
      return this.__mt_cmdAddRecipient; 
     } 
     set { 
      this.__mt_cmdAddRecipient = value; 
      this.SetNativeField("cmdAddRecipient", value); 
     } 
    } 

    [MonoTouch.Foundation.Connect("cmdPickDateTime")] 
    private MonoTouch.UIKit.UIButton cmdPickDateTime { 
     get { 
      this.__mt_cmdPickDateTime = ((MonoTouch.UIKit.UIButton)(this.GetNativeField("cmdPickDateTime"))); 
      return this.__mt_cmdPickDateTime; 
     } 
     set { 
      this.__mt_cmdPickDateTime = value; 
      this.SetNativeField("cmdPickDateTime", value); 
     } 
    } 

    [MonoTouch.Foundation.Connect("txtDescription")] 
    private MonoTouch.UIKit.UITextView txtDescription { 
     get { 
      this.__mt_txtDescription = ((MonoTouch.UIKit.UITextView)(this.GetNativeField("txtDescription"))); 
      return this.__mt_txtDescription; 
     } 
     set { 
      this.__mt_txtDescription = value; 
      this.SetNativeField("txtDescription", value); 
     } 
    } 

    [MonoTouch.Foundation.Connect("txtDueDat")] 
    private MonoTouch.UIKit.UITextField txtDueDat { 
     get { 
      this.__mt_txtDueDat = ((MonoTouch.UIKit.UITextField)(this.GetNativeField("txtDueDat"))); 
      return this.__mt_txtDueDat; 
     } 
     set { 
      this.__mt_txtDueDat = value; 
      this.SetNativeField("txtDueDat", value); 
     } 
    } 

    [MonoTouch.Foundation.Connect("txtName")] 
    private MonoTouch.UIKit.UITextField txtName { 
     get { 
      this.__mt_txtName = ((MonoTouch.UIKit.UITextField)(this.GetNativeField("txtName"))); 
      return this.__mt_txtName; 
     } 
     set { 
      this.__mt_txtName = value; 
      this.SetNativeField("txtName", value); 
     } 
    } 

    [MonoTouch.Foundation.Connect("txtRecipients")] 
    private MonoTouch.UIKit.UITextView txtRecipients { 
     get { 
      this.__mt_txtRecipients = ((MonoTouch.UIKit.UITextView)(this.GetNativeField("txtRecipients"))); 
      return this.__mt_txtRecipients; 
     } 
     set { 
      this.__mt_txtRecipients = value; 
      this.SetNativeField("txtRecipients", value); 
     } 
    } 

    [MonoTouch.Foundation.Connect("cmdDoneDescription")] 
    private MonoTouch.UIKit.UIButton cmdDoneDescription { 
     get { 
      this.__mt_cmdDoneDescription = ((MonoTouch.UIKit.UIButton)(this.GetNativeField("cmdDoneDescription"))); 
      return this.__mt_cmdDoneDescription; 
     } 
     set { 
      this.__mt_cmdDoneDescription = value; 
      this.SetNativeField("cmdDoneDescription", value); 
     } 
    } 

    [MonoTouch.Foundation.Connect("cmdSend")] 
    private MonoTouch.UIKit.UIButton cmdSend { 
     get { 
      this.__mt_cmdSend = ((MonoTouch.UIKit.UIButton)(this.GetNativeField("cmdSend"))); 
      return this.__mt_cmdSend; 
     } 
     set { 
      this.__mt_cmdSend = value; 
      this.SetNativeField("cmdSend", value); 
     } 
    } 
    } 
} 

のXcode 4でXIBを変更した後:ここ


// WARNING 
// 
// This file has been generated automatically by MonoDevelop to store outlets and 
// actions made in the Xcode designer. If it is removed, they will be lost. 
// Manual changes to this file may not be handled correctly. 
// 
using MonoTouch.Foundation; 

namespace iPhoneSolution 
{ 
    [Register ("NewTaskView")] 
    partial class NewTaskView 
    { 
     [Outlet] 
     MonoTouch.UIKit.UIView view { get; set; } 

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

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

     [Outlet] 
     MonoTouch.UIKit.UITextView txtDescription { get; set; } 

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

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

     [Outlet] 
     MonoTouch.UIKit.UITextView txtRecipients { get; set; } 

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

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

     [Outlet] 
     MonoTouch.UIKit.UIButton cmdDoSomething { get; set; } 
    } 
} 
は、私はそれを再現するために使用される手順は次のとおり

アプリを実行し、検証
  1. その質問ディスプレイの表示を適切
  2. ダブル
  3. [保存]を選択するXcodeで4
  4. ドラッグを、それを開いて、ビュー上に丸い矩形のボタンをドロップするnibファイルをクリックしてください " xxxx "
  5. デバッグ| iPhoneSimulatorでアプリを実行します。ビューを表示しています。
  6. アプリ
  7. は、二重停止cmdDosomething
  8. 閉じる
  9. という名前アウトレットを作成し、ファイルを保存
  10. の.hにあるボタンからのXcode 4
  11. コントロール+ドラッグでそれを開くために同胞をクリックします。
  12. ビューのViewDidLoadおよびViewDidAppearの先頭にブレークポイントを設定します。
  13. アプリケーションを再起動します。
  14. ビューを表示するタブをクリックします。 ViewDidAppearがヒットしました。 ViewDidLoadはヒットしません。表示はではなく、が表示されます。タブバーの上の空白の部分のみが表示されます。
  15. タブでランダムにクリックします。他のすべてのビューは正常に表示されます。 ViewDidAppearは問題のビューで通常呼び出されます。

私は本当にポインターやアイデアに感謝します。 おかげで百万 WCM

答えて

3

私はこれと同じ問題を持っていたし、原因と解決策を見つけ出すことができました:前2.8に作成された

私の見解では、ビューと呼ばれるビューのための出口を持っていました。ヘッダーファイルを開くと、XCodeがビューの宣言が重複した名前であると不平を言っていることがわかりました。

それが問題の原因かもしれないようにこれが見えたので、私は、次の手順を取っ:

1))のアウトレット

2のファイルの所有者のリストに表示コンセントを削除した手動2を削除

3)ファイルの所有者のアウトレットのリスト内のビューアウトレットを直接ビューにリンクしました(ヘッダーファイルに接続をドラッグしていない、左のビューにドラッグしました)デザイナーエリアの手前)。この手順を忘れると、ペン先がロードされているにもかかわらずビューアウトレットが送信されないというランタイムエラーが発生します。

これが問題を解決するのに役立ちます。

私は忘れてしまった:デザイナーファイルが正しいです。 MTは、コンセントがデザイナーファイルで識別される方法を変更しました。

+0

このソリューションは正しいです - Interface Builder 3の制限を回避するために作成された冗長ビューアウトレットを削除するだけですが、単純化された新しいデザイナーコードと競合します。 MonoDevelop 2.8.2はそれを自動的に削除します。詳しい説明は、http://support.xamarin.com/customer/portal/questions/40506-view-outlet-was-not-set-when-using-xcode-4を参照してください。 –

関連する問題