加载泛型类型在模拟器中工作但不在设备中工作

时间:2013-07-19 19:59:28

标签: ios generics xamarin.ios

在我的iOS应用中,我有一个自定义UIView,显示枚举中列出的值列表。这是通用的,因此同一个类可以使用任何枚举:

public class EnumViewer<TEnumType> : UIView
{...}

假设我有一种颜色:

public enum Color
{
  Red,
  Green,
  Blue
}

我可以使用如下视图在应用中查看这些值:

var view = new EnumViewer<Color>
//add to parent view, set the frame, etc.

当然,重点是我可以将其重用于任何枚举类型。我有一个EnumViewer<ThisSet>和一个EnumViewer<ThatSet>,一个Choose This按钮和一个Choose That按钮。如果单击其中一个按钮,它会在弹出窗口中显示相应枚举中的选项列表。

这在模拟器上完美运行。非常奇怪的问题是在设备上,以及模拟器中的 NOT ,应用程序会混淆并显示错误枚举的列表。确切地说,如果您点击Choose This,它会显示ThisSet项目列表,但如果您再点击Choose That,则会显示相同的列表。如果您点击Choose That 第一个,它会正确显示ThatSet个项目列表,但如果您点击Choose This,它会再次显示ThatSet列表{1}}值。我已经确认它实际上每次创建视图,但TEnumType实际上是错误的,我无法弄清楚原因。我知道代码是正确的,因为它在模拟器中工作正常。

1 个答案:

答案 0 :(得分:4)

Xamarin.iOS不支持子类化本机类的泛型类。这最近变成了错误或警告。