2016-03-23 15 views
0

私はXamarin.iOSでカスタムUITableViewCellを作成するためのいくつかの例を試しています。そこにあるすべての例は同じことを言っていて、同じコードを使用していますが、それを働かせてください。以下は私のカスタムUITableViewSourceの私getcellをする方法である:私はありませんのでObjCRuntime.Runtime.GetNSObject無効なキャスト例外

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
      { 
       var cell = tableView.DequeueReusableCell(CellIdentifier) as WorkoutPhaseListViewCell; 

       if (cell == null) 
       { 
        cell = new WorkoutPhaseListViewCell(); 
        var views = NSBundle.MainBundle.LoadNib("WorkoutPhaseListView", cell, null); 
        cell = (WorkoutPhaseListViewCell)ObjCRuntime.Runtime.GetNSObject(views.ValueAt(0)); 

       } 

       WorkoutPhase item = WorkoutPhases[indexPath.Row]; 
       return cell; 
    } 

はどんなに私は何をすべきか、ObjCRuntime.GetNSObjectをキャストするための呼び出しは常にnull(または、この場合には、無効なキャスト例外をスローではありません私のカスタムタイプ(UITableViewCellをサブクラス化する)にキャストできないため、ポイントを説明する目的でasキーワードを使用します。それは、NSObjectから管理された型に値をキャストする際に問題と思われます。

ここにはexamples I'm trying to followのいずれかです。

私のタイプにNSObjectをキャストするために欠けている特別な魔法がありますか?

+0

「WorkoutPhaseListViewCell」の宣言をお願いできますか? – dalexsoto

+0

ここにWorkoutPhaseListViewCellの要点へのリンクがあります:https://gist.github.com/donniefitz2/ad3eb1a4657844fc097e –

答えて

0

views.ValueAtプロジェクト内(例えば、NIBファイル内の)別の場所に変更があなたのコードを破ることができるように危険な仮定することができます(0)

。いくつかの(デバッグ専用の)チェックを追加すると、将来の(または現在の)多くの問題を回避できます。

InvalidCastExceptionの場合、viewsNSArray)の位置0にあるものをデバッガで識別します。 WorkoutPhaseListViewCellでない場合(例:UIView)、キャスト例外は正常です。

また、あなたのNIBに正しい識別子が設定されていること(コードと一致するように)、WorkoutPhaseListViewCellタイプに[Register]があることを確認してください。

1

Xamarin Studioを使用しているリファクタが私の問題を解決しました。私はWorkoutPhaseListViewCellからWorkoutPhaseListViewCellに名前を変更し、XSは.designer.csファイルの[Register]属性を変更しなかったので、私のタイプは実行時に想定されていたタイプではありませんでした。

関連する問題