自定义UITableViewCell,GetCell抛出UnknownNSKeyException

时间:2013-05-08 16:25:50

标签: ios uitableview xamarin.ios xib iboutlet

我在项目中创建了自定义UITableViewController,Cell和Source。 Controller和Cell最初是作为iPhone UIViewController模板创建的,因此我将部分类与XIB文件配对。我有相同的设置已经在使用另一个表,我已经按照相同的过程(我认为)来创建这个,这就是为什么我不知道为什么我会收到此错误。

这是GetCell班级中的TableViewSource

public override UITableViewCell GetCell (UItableView tv, NSIndexPath path)
{
    MyCell oCell;
    NSArray oViews;
    //
    oCell = tv.DequeueReusableCell ("MyCell") as MyCell;
    //
    if (oCell == null)
    {
        oViews = NSBundle.MainBundle.LoadNib ("MyCell", tv, null);
        oCell = Runtime.GetNSObject (oViews.ValueAt (0)) as MyCell;
    }
    //
    oCell.UpdateWithData (MyDataCollection[path.Row]);
    //
    return oCell;
}

我在尝试加载nib的行上得到异常:

  

抛出Objective-C异常。名称:NSUnknownKeyException原因:   [setValue:forUnidentifiedKey:]:这个类是   密钥lbl_address不符合密钥值编码。

我认为这是指IB中创建单元格接口的问题,因为lbl_address是位于UITableViewCell内的UILabel。我正试图在IB中玩一些东西,但如果你第一次没有正确地做这件事,那可能会非常令人愤怒。希望有人会认识到这个错误并让我直截了当。

修改

如果没有找到答案,我选择避免从笔尖加载并对我的代码进行了以下更改:

Get Cell

中的新MyTableViewSource方法
public override UITableViewCell GetCell (UITableView tv, NSIndexPath path)
{
    MyCell oCell;
    //
    oCell = tv.DequeueReusableCell ("MyCell") as MyCell;
    //
    if (oCell == null)
        oCell = new MyCell ("MyCell");
    //
    oCell.UpdateWithData (MyDataCollection[path.Row]);
    //
    return oCell;
}

MyCell

的新构造函数
public MyCell (string sIdentifier)
    : base (UITableViewCellStyle.Default, sIdentifier)
{
    // Set up the contents of the cell in the absence of loading from the nib
    txt_name = new UILabel ()
    {
        Font = UIFont.SystemFontOfSize (15),
        TextColor = UIColor.LightGray
    };
    img_profile = new UIImageView ();
    //
    // Make sure to add the controls to the content view!
    ContentView.Add (txt_name);
    ContentView.Add (img_profile);
}

希望这可以帮助那些人:)

1 个答案:

答案 0 :(得分:0)

这通常是由于某个元素已被删除但xib中的先前连接插座仍然有效。

我会尝试以下步骤。

打开xib。右键单击单元格。如果您在该键名附近看到黄色警告,请将其删除(x按钮)。

如果能解决这个问题,请告诉我。