2016-07-18 3 views
0
私は現在、いくつかのクロスプラットフォームのモバイル開発をやってる

にNSInvalidArgumentExceptionを取得し、iOSの部分を開始しようとしています。私は前にiOSの開発をしたことはありませんし、私は自分自身に知り合うことができると思った"Hello, iOS" Tutorials.残念ながら、物事はスムーズに進まなかった。私は常に私のTouchUpInsideアクションからNSInvalidArgumentExceptionsを得る:Xamarin - 常にXamarinを(そのC#で)使用してのVisual Studioによってボタンのクリック

Foundation.MonoTouchException: Objective-C exception thrown. 
Name: NSInvalidArgumentException Reason: 
-[ViewController TranslateButton_TouchUpInside:]: 
unrecognized selector sent to instance 0x7b6200d0 

私は時折、文字通りボタンを作り直すことで一瞬のためにそれを解決することができますが、それは右、その後ほとんど壊れます。実際のエラー自体は、私のMain.csファイルで発生します。それはどんな役に立つ

using UIKit; 

namespace CheckinIOS 
{ 
    public class Application 
    { 
     static void Main(string[] args) 
     { 
      UIApplication.Main(args, null, "AppDelegate"); //this line is where it breaks 
     } 
    } 
} 

場合、私はiOSの9.3を実行しているiPhone 5Sシミュレータに展開しようとしています(しかし、それは同様にiPhone 6シミュレータ上で壊れます)。必要に応じてコードを投稿することもできますが、XamarinのチュートリアルからすべてのC#をコピーして、Main.storyboardの場合と同じことをしました。

私は私と同じ問題を持つ人を探している間を費やしているが、その解決策は動作しませんでしたか、彼らはわずかに異なるの理由でエラーが発生しました。いかなる援助も感謝します。

EDIT:ここはTranslateButton_TouchUpInsideの私の実装です:

TranslateButton.TouchUpInside += (object sender, EventArgs e) => 
     { 
      // Convert the phone number with text to a number 
      // using PhoneTranslator.cs 
      translatedNumber = PhoneTranslator.ToNumber(PhoneNumberText.Text); 

      // Dismiss the keyboard if text field was tapped 
      PhoneNumberText.ResignFirstResponder(); 

      if (translatedNumber == "") 
      { 
       CallButton.SetTitle("Call", UIControlState.Normal); 
       CallButton.Enabled = false; 
      } 
      else 
      { 
       CallButton.SetTitle("Call " + translatedNumber, UIControlState.Normal); 
       CallButton.Enabled = true; 
      } 
     }; 
+0

両方がTranslateButton_TouchUpInside 'の実装を表示:'あなた 'ViewController'クラス – dan

+0

から、私は私の実装を追加しました。Xamarinのチュートリアルからコピーしました – Captain

+0

あなたの実装はあなたのボタンが接続されているメソッドと一致しません。あなたのビューコントローラにボタンを接続した後、メソッドの宣言を編集していますか? – dan

答えて

2

iOSのランタイムがあなたのViewControllerクラスでTranslateButton_TouchUpInside:(OBJの-Cの土地で)と呼ばれる方法を探しています。ただし、その名前でObj-Cにエクスポートされるメソッドはありません。最初に、ストーリーボード内のボタンにイベントを追加したことがありますが、その名前はおそらく削除されていますが、そのメソッドは削除されたか、実装されていないことが考えられます。

は、iOSデザイナーにストーリーボードを開き、あなたのボタンをキャンバスに選択されたときにプロパティ - > [イベント]タブからすべてのイベントを削除してください。また、ボタンがキャンバス上で選択されているときに、プロパティ - >ウィジェットパネルにボタンの名前がTranslateButtonであると仮定します。

XamarinのiOSのコントロールにイベントをアタッチするカップルの方法があります。 1つ、そして好ましい方法は、iOS Designerでコントロール用のイベントを作成することです。これを行うと、メソッド名をObj-CランタイムにエクスポートするExport属性を持つ.designer.csファイルに部分的なメソッドスタブが作成されます。次に、ViewControllerのメインの.csファイルに同じシグネチャ(エクスポート属性なし)を使用して、このメソッドを実装する必要があります。これはObj-Cの土地ではactionと呼ばれています。

もう1つの方法は、コードスニペットに示されているとおりです。この場合、TouchUpInsideイベントを購読するコードで使用できるプロパティ - >ウィジェットペインでコントロールに名前を付ける必要があります。これはObj-Cの土地ではoutletと呼ばれています。

私の推測では、ViewControllerにTranslateButton_TouchUpInside:メソッドを実装することなく、両方を行ったことがあります。これは、コントロールにイベントを追加するときに.designer.csファイルで作成されたメソッドスタブのExport属性で使用されるObj-C名です。

しかし、ストーリーボードを見ずに言うのは難しいですし、メインViewController.csファイルとViewController.designer.csファイル

+0

ああ、うわー、ありがとう!私は 'TranslateButton_TouchUpInside'をまだ私のストーリーボードのコードに' 'と記載していました。私はボタンをダブルクリックしなければならないし、それをそこに置くことを認識していない。 – Captain

+0

素晴らしい、私は助けてうれしい! – jgoldberger

関連する問題