gpt4 book ai didi

c# - UITableView 中的随机 "Could not load NIB in bundle"

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:50 26 4
gpt4 key购买 nike

我有一个似乎在设备上随机抛出异常的 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,其中包含用于布置 UI 的 XIB 文件。 XIB 设置了一个自定义的 UITableViewCell,上面有其他控件和 socket 等。

这是 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)
{
}

我这里有什么地方做错了吗?这种情况可能很难重现。

最佳答案

可能是以下错误:您尝试在单元 Controller 的 View 加载之前设置您的内容。但我不太确定。 :-)

可以遵循两种不同的方式:

1)像下面这样同步加载xib

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

有关详细信息,请参阅以下教程 monotouch-custom-tables .

2) 按照 Creating-Custom-UITableViewCells-with-MonoTouch-the-correct-way 上的以下教程进行操作

在我看来,如果这并不意味着要更改大量代码,您可以尝试遵循第二个。我喜欢第二个,因为它反射(reflect)了您在 iOS 中创建自定义单元格的方式。在 iOS 开发中,当您创建自定义单元格时,您不会为单元格创建 Controller 。单元格只是您放置数据的 View 。它就像一种动态更改其内容的占位符。

希望对您有所帮助。

关于c# - UITableView 中的随机 "Could not load NIB in bundle",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8943473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com