MVVMCross KittenView错误绑定单元格

时间:2013-08-09 06:24:34

标签: mvvmcross

这个错误实际上也出现在我自己的应用程序中,但我想我只是引用了 KittenView_Mac 项目中的相同问题。

如果我在iPhone 6.0 / 6.1仿真器上运行该项目,一切正常。如果我在5.1上运行它,它会在尝试绑定xib文件中的自定义表格单元时崩溃。错误是:

[UITableView dequeueReusableCellWithIdentifier:forIndexPath:]: unrecognized selector sent to instance 0xb4a3200

如果我在4.3上运行它,我会得到:

[UITableView registerNib:forCellReuseIdentifier:]: unrecognized selector sent to instance 0x7c6a200

我需要改变一些东西才能让它发挥作用吗?

2 个答案:

答案 0 :(得分:1)

MvvmCross正式支持iOS 6.0及更高版本 - 目前超过所有iOS设备的90% - http://stats.unity3d.com/mobile/index-ios.html

然而,大多数MvvmCross确实在iOS5上运行 - 这使我们占所有iOS设备的98.5%。

如果你想获得iOS4及更早版本的支持,那么你需要避免一些方面 - 包括在iOS4之后推出的registerNib:forCellReuseIdentifier(我猜!)。

为了实现这一目标,您需要编写自己的iOS4兼容TableViewSource代码,这将直接创建新的单元格,而不是依赖于此registerNib api。

为此,您可以使用自己的自定义TableViewSource继承自MvxTableViewSource - 类似于:

 public class MyTableViewSource : MvxTableViewSource
 {
    public MyTableViewSource(UITableView tableView)
        : base(tableView)
    {
    }

    protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item)
    {
        var existing = (UITableViewCell)tableView.DequeueReusableCell(KittenCell.CellIdentifier);
        if (existing != null)
            return existing;

        return KittenCell.Create();
    }
 }

答案 1 :(得分:0)

首先,我必须赞扬斯图亚特指导我朝着正确的方向发展。我不知道[UITableView dequeueReusableCellWithIdentifier:forIndexPath:]意味着什么 - 没有Obj-C的背景 - 现在我意识到这意味着'我找不到那种方法!'

代码中的这一行:

return (UITableViewCell)TableView.DequeueReusableCell(cellIdentifier, indexPath);

使用iOS 5,需要成为:

return (UITableViewCell)TableView.DequeueReusableCell(cellIdentifier);

这样才能让它实际执行该方法 - 但是iOS告诉我nib文件无效。感谢这篇文章https://stackoverflow.com/a/15019273/31902我发现了我的解决方案 - 需要让xib文件与早期版本的iOS兼容!

现在,这似乎崩溃了4.3,但根据Stuart的评论,我很高兴我的应用程序在98.5%的iOS设备上运行。