1

当使用 Monocross(使用 MonoTouch)创建一个简单的应用程序并为 iOS 设备编译时,我收到了一些不好的警告,如下所示:

警告 MT4112:注册商发现了一个通用类型:MonoCross.Touch.MXTouchViewController`1。不支持使用 ObjectiveC 注册泛型类型,这将导致随机行为和/或崩溃。(MT4112)。

我已经阅读了所有关于在 iOS 设备上使用 MonoTouch 和泛型的信息,但大多数情况下它不受支持。我的应用程序目前可以在实际设备上运行,但警告让我担心。

我想我的问题是,即使使用最简单的应用程序,当您收到这些警告时,Monocross 的状态是什么?它还没有准备好用于专业用途,还是警告与 Monocross 中使用泛型的方式无关?

我还可以从 Xamarin.iOS 文档中添加以下内容:“Xamarin.iOS 当前不支持创建 NSObject 类的通用子类”

这正是 Monocross 所做的,例如 MXTouchTableViewController 类。

4

1 回答 1

4

这有一些历史:创建 NSObject 的通用子类从来都不是受支持的场景,但不幸的是 MonoTouch 从未强制执行,也没有警告过这一事实。所以人们当然最终会这样做。

然后有一天我不得不找到一个看起来像真正的 heisenbug 的东西,结果(经过数小时令人沮丧的调试)是因为有问题的项目使用了 NSObject 的通用子类。确切的细节并不重要,但那是在 MonoTouch 中添加警告的时候。

我的观点是人们长期以来一直在使用 NSObject 的通用子类,没有遇到任何问题。如果您广泛地测试您的应用程序(无论如何您都应该这样做),请不要担心这一点。

但是,如果您确实遇到了奇怪和莫名其妙的行为,我们很可能会在调查您在 MonoTouch 中发现错误的任何声明之前要求您修复这些警告。

于 2013-02-28T22:25:49.307 回答