随机的“;无法在束“”中加载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)
{
}

我是不是做错了什么?可能很难对这种情况作出谴责。

随机的“;无法在束“”中加载NIB;在UITableView中

可能是以下错误:您试图在单元格控制器的视图加载之前设置内容。但我不太确定

可以采用两种不同的方法:

1) 像下面的一样同步加载xib

MonoTouch.Foundation.NSBundle.MainBundle.LoadNib ("YourNibName", this, null);

有关更多信息,请参阅以下教程单点触控自定义表格。

2) 按照以下教程使用MonoTouch以正确的方式创建自定义UITableViewCells

在我看来,如果这并不意味着要更改很多代码,你可以尝试遵循第二个。我喜欢第二个,因为它反映了你在iOS中创建自定义单元格的方式。在iOS开发中,当你创建自定义单元格时,你不会为单元格创建控制器。单元格只是放置数据的视图。它就像一种占位符,可以动态地更改内容。

希望能有所帮助。