随机的“;无法在束“”中加载NIB;在UITableView中
本文关键字:加载 NIB UITableView 随机 | 更新日期: 2023-09-27 18:20:58
我有一个MonoTouch应用程序,它似乎在设备上随机抛出了一个异常:
Jan 19 11:54:31 unknown UIKitApplication:com.mycompany.myapp[0xbab7][552]
<Notice>: MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown.
Name: NSInternalInconsistencyException Reason:
Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/my-guid/MyApp.app> (loaded)' with name 'MyTableCellController' Jan 19 11:54:31 unknown UIKitApplication:com.mycompany.myapp[0xbab7][552] <Notice>:
at MonoTouch.UIKit.UIViewController.get_View () [0x00000] in <filename unknown>:0 Jan 19 11:54:31 unknown UIKitApplication:com.mycompany.myapp[0xbab7][552] <Notice>:
at MyDataSource.GetCell (MonoTouch.UIKit.UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath) [0x00000] in <filename unknown>:0 Jan 19 11:54:31 unknown UIKitApplication:com.mycompany.myapp[0xbab7][552] <Notice>:
at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00000] in <filename unknown>:0 Jan 19 11:54:31 unknown UIKitApplication:com.mycompany.myapp[0xbab7][552] <Notice>:
at MyApp.Application.Main (System.String[] args) [0x00000] in <filename unknown>:0
我有一个UIViewController,它有一个XIB文件来布置UI。XIB设置了一个自定义的UITableViewCell,上面有其他控件和插座等。
以下是GetCell方法抛出错误的示例:
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
MyCellController controller = null;
var cell = tableView.DequeueReusableCell (CellName);
if (cell == null)
{
controller = new MyCellController();
cell = (UITableViewCell)controller.View;
cell.Tag = _count++;
_controllers[cell.Tag] = controller;
}
else
{
controller = _controllers[cell.Tag];
}
controller.LoadStuff(_myArrayOfStuff[indexPath.Row]);
return cell;
}
该错误发生在cell = (UITableViewCell)controller.View
行,我假设该错误与尚未加载XIB有关。
我只是在设备上随机发生崩溃,而且只有在快速滚动时才会发生。
我听说XIB有时是异步加载的,我的UIViewController的构造函数看起来像这样:
public MyTableCellController () : base ("MyTableCellController", null)
{
}
我是不是做错了什么?可能很难对这种情况作出谴责。
可能是以下错误:您试图在单元格控制器的视图加载之前设置内容。但我不太确定
可以采用两种不同的方法:
1) 像下面的一样同步加载xib
MonoTouch.Foundation.NSBundle.MainBundle.LoadNib ("YourNibName", this, null);
有关更多信息,请参阅以下教程单点触控自定义表格。
2) 按照以下教程使用MonoTouch以正确的方式创建自定义UITableViewCells
在我看来,如果这并不意味着要更改很多代码,你可以尝试遵循第二个。我喜欢第二个,因为它反映了你在iOS中创建自定义单元格的方式。在iOS开发中,当你创建自定义单元格时,你不会为单元格创建控制器。单元格只是放置数据的视图。它就像一种占位符,可以动态地更改内容。
希望能有所帮助。