2016-03-23 14 views
0

Xamarin.iOS uygulamasında özel bir UITableViewCell oluşturmak için bazı örnekleri izlemeye çalışıyorum ve örneklerin hepsinin hemen hemen aynı şeyi söylemesi ve aynı kodu kullanmasına rağmen Çalışmaya başla. Çünkü değilim bu durumda geçersiz döküm istisna atar içinde, ObjCRuntime.GetNSObject döküm çağrısı her zaman null olursa olsun ben neObjCRuntime.Runtime.GetNSObject Invalid Cast Exception

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; 
    } 

(veya: Aşağıda benim GetCell yöntemi benim özel UITableViewSource üzerindedir özel tipte (UITableViewCell alt sınıflandırmadır) yayınlanamayacağı için, noktayı açıklamak amacıyla as anahtar sözcüğünü kullanarak). NSObject öğesinden yönetilen türüme değer vermekle ilgili bir sorun gibi görünüyor.

İşte bir examples I'm trying to follow biridir.

NSObject'i türüme dökebilmek için eksik olduğum özel bir sihir var mı?

+0

"WorkoutPhaseListViewCell" bildirgesini yerine getirebilir misiniz? – dalexsoto

+0

İşte WorkoutPhaseListViewCell ile bir gist bağlantısı: https://gist.github.com/donniefitz2/ad3eb1a4657844fc097e –

cevap

0

views.ValueAt (0) kodunuzu kırabilir projenizde (ELVES dosyada örneğin) başka yerde bir değişiklik olarak tehlikeli varsayım olabilir

. Bazı (yalnızca hata ayıklama) kontrolleri eklemek, size gelecekteki (veya şimdiki) bir çok sorunu neden olabilir. InvalidCastException için

(ki bir NSArray belirtir) views pozisyonunda 0 içinde ne tanımlamak için ayıklayıcısını kullanın. WorkoutPhaseListViewCell değilse (ör. Içindeki bir UIView), döküm istisnası normaldir. Ayrıca, NIB'nizin doğru tanıtıcı kümesine (kodla eşleşecek şekilde) ve yönetilen WorkoutPhaseListViewCell türünüzde bir [Register] bulunduğuna dikkat edin.

1

Xamarin Studio'nun sorununu içeren bir refactor çıkıyor. WorkoutPhaseListView'den WorkoutPhaseListViewCell adını değiştirdim ve XS .designer.cs dosyasındaki [Register] özniteliğini değiştirmedim, bu nedenle türüm çalışma zamanında olması gereken türde değildi.