这个错误实际上也出现在我自己的应用程序中,但我想我只是引用了 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
我需要改变一些东西才能让它发挥作用吗?
答案 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设备上运行。