2016-05-21 7 views
2

Ich weiß, dass diese Frage eine Million Mal gestellt wurde, aber ich bekomme den Fehler, mit Stuart Lodge Tutorials zu folgen "N + 1 Tage von MvvmCross ", N = 11, CollectionView. Ich folge nicht 100%, da ich ein anderes Projekt habe, das ich bearbeite, während ich mir die Tutorials anschaue, so bin ich mir sicher, dass ich gerade etwas verpasst habe. Hier ist die vollständige Fehlermeldung:MvvmCross/Xamarin "Diese Klasse ist nicht Schlüsselcodierung-kompatibel für den Schlüssel"

Foundation.MonoTouchException: Objective-C exception thrown. 
Name: NSUnknownKeyException Reason: [<NSObject 0x796c2460>  
setValue:forUndefinedKey:]: this class is not key value 
coding-compliant for the key MyLabel. 

Es erscheint für TestItemView eine gültige Auslass für die automatische Generierung Teil Klasse seine

Ich glaube nicht, dass dies ein Fall ist eine Kontrolle der xib der Zugabe und dann entfernen, so dass es eine gestrandete Verbindung gibt. Dies passiert, wenn ich die Xib lösche und von vorne neu beginne. Ich habe eine "FirstView: MvxCollectionViewController" und für die Zellen habe ich eine "TestItemView: MvxCollectionViewCell", die ein Stand-in für die "KittenCollectionCell" ist. Ich werde den Quellcode für FirstView, TestItemView und die TestItemView.xib unten geben.

Firstview:

using System.Drawing; 
using MvvmCross.Binding.BindingContext; 
using MvvmCross.iOS.Views; 
using Foundation; 
using MvvmCross.Binding.iOS.Views; 
using UIKit; 

namespace FirstDemo.Core.iOS.Views 
{ 
    [Register("FirstView")] 
    public class FirstView : MvxCollectionViewController 
    { 
     private bool _isInitialized = false; 
     public FirstView() : base(new UICollectionViewFlowLayout() { 
      ItemSize = new SizeF(240, 400), 
      ScrollDirection = UICollectionViewScrollDirection.Horizontal 
     }) 
     { 
      _isInitialized = true; 
      ViewDidLoad(); 
     } 

     public sealed override void ViewDidLoad() 
     { 
      if (!_isInitialized) 
       return; 

      base.ViewDidLoad(); 
      //var source = new MvxStandardTableViewSource(TestItemsTableView, "TitleText Name;"); 
      //TestItemsTableView.Source = source; 
      CollectionView.RegisterNibForCell(TestItemView.Nib, TestItemView.Key); 
      var source = new MvxCollectionViewSource(CollectionView, TestItemView.Key); 
      CollectionView.Source = source; 

      var set = this.CreateBindingSet<FirstView, Core.ViewModels.FirstViewModel>(); 
          set.Bind(source).To(vm => vm.TestItemViewModels); 
      set.Apply(); 
      CollectionView.ReloadData(); 
      } 
    } 
} 

Hier ist meine Hand codierte Teil für TestItemView:

using System; 
using FirstDemo.Core.ViewModels; 
using Foundation; 
using MvvmCross.Binding.BindingContext; 
using MvvmCross.Binding.iOS.Views; 
using UIKit; 

namespace FirstDemo.Core.iOS 
{ 
    public partial class TestItemView : MvxCollectionViewCell 
    { 
     public static readonly UINib Nib = UINib.FromName("TestItemView", NSBundle.MainBundle); 
     public static readonly NSString Key = new NSString("TestItemView"); 

     public TestItemView(IntPtr handle) 
      : base(string.Empty /* TODO - this isn't really needed - mvx bug */, handle) 
     { 
      this.DelayBind(() => 
      { 
       var set = this.CreateBindingSet<TestItemView, TestItemViewModel>(); 
       set.Bind(MyLabel).To(testItem => testItem.Name); 
       set.Apply(); 
      }); 
     } 

     public static TestItemView Create() 
     { 
      return (TestItemView)Nib.Instantiate(null, null)[0]; 
     } 
    } 
} 

Hier wird der automatisch generierte Teil ist:

// WARNING 
// 
// This file has been generated automatically by Xamarin Studio from the outlets and 
// actions declared in your storyboard file. 
// Manual changes to this file will not be maintained. 
// 
using Foundation; 
using System; 
using System.CodeDom.Compiler; 
using UIKit; 

namespace FirstDemo.Core.iOS 
{ 
    [Register ("TestItemView")] 
    partial class TestItemView 
    { 
     [Outlet] 
     [GeneratedCode ("iOS Designer", "1.0")] 
     UILabel MyLabel { get; set; } 

     [Outlet] 
     [GeneratedCode ("iOS Designer", "1.0")] 
     UIView TestItemInfo { get; set; } 

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

Und schließlich, die notorische Xib für TestItemView:

<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6211" systemVersion="14A298i" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES"><dependencies><plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6204"/></dependencies><objects><placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="TestItemView"><connections><outlet property="MyLabel" destination="28" id="name-outlet-28"/><outlet property="TestItemInfo" destination="1" id="name-outlet-1"/></connections></placeholder><placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/><view contentMode="scaleToFill" id="1"><rect key="frame" x="0.0" y="0.0" width="600" height="600"/><autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/><color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/><subviews><label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Label" lineBreakMode="tailTruncation" minimumFontSize="10" id="28" translatesAutoresizingMaskIntoConstraints="NO" fixedFrame="YES"><rect key="frame" x="235" y="172" width="42" height="21"/><color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/><fontDescription key="fontDescription" type="system" pointSize="17"/><color key="textColor" cocoaTouchSystemColor="darkTextColor"/><nil key="highlightedColor"/></label></subviews><userDefinedRuntimeAttributes><userDefinedRuntimeAttribute keyPath="accessibilityIdentifier" type="string" value="MyTestItem"/></userDefinedRuntimeAttributes></view></objects></document> 

Wenn jemand eine Ahnung hat, würde ich die Hilfe zu schätzen wissen, weil ich bei einem vollständigen Verlust bin.

Danke!

Antwort

0

Ich bin nicht mit dem schnellen Ansatz familier. Aber in objective-c müssen Sie outlet-Objekt manuell von XIB zum Code hinzufügen. Und wenn die Ansicht Ihres XIB mit der Adresse einer älteren Ansicht verknüpft ist, wird dieser Fehler angezeigt. Also haben wir in objective-c die folgenden Schritte gemacht.

  • öffnen Sie
  • Suche nach dem Etikett mit dem Namen MyLabel
  • überprüfen Sie die Verbindung XIb (die es Objekt verknüpft)
  • , wenn nötig, entfernen Sie den Auslass verbindet und dass wieder einmal hinzuzufügen.
Verwandte Themen