Unity使用IL2CPP构建IOS64位中System.Enum.IsDefined的问题

来源:互联网 发布:大数据应用于电力工程 编辑:程序博客网 时间:2024/06/06 01:58

System.Enum.IsDefined 

今天突然想起来特地开通一下博客,只想记录自己在开发工程中所经历的各种问题,然后分享给大家!以便给更多人解决可能的困扰。

由于从2015年2月1日起,上传到App Store的IOS应用必须包含对64位系统的支持,并且必须使用Xcode6或更高版本中的ios8  SDK编译。

然后unity必然要支持iOS8, 最终选择了IL2CPP来支持iOS64位。

废话不多说,在移植游戏的工程中,unity打包出来的Xcode的工程,在不选择IL2CPP打包32位直至发布完全么有问题

但是要支持64位必然得选择IL2CPP打包,然后问题来了,因为在我的代码里有用到

System.Enum.IsDefined 

然后基本涉及到这里的地方失灵了,在这种情况下不报任何错误,只有看日志


ArgumentException: The value parameter is not the correct type.It must be type String or the same type as the underlying typeof the Enum.

  at <Module>.UnsupportedMember_String (System.Security.SecurityElement self, System.String signature) [0x00000] in <filename unknown>:0 

  at System.Enum.IsDefined (System.Type enumType, System.Object value) [0x00000] in <filename unknown>:0 

  at Invoker+Parameter.GetEnumParameter (System.String debugName, System.Type fallBackType) [0x00000] in <filename unknown>:0 

  at Invoker+Parameter.GetEnumParameter (System.String debugName) [0x00000] in <filename unknown>:0 

  at Invoker+Listener.InitialiseParameters (System.String invokerName) [0x00000] in <filename unknown>:0 

  at Invoker+Listener.Fire (System.String invokerName, Boolean debugEvent) [0x00000] in <filename unknown>:0 

  at Invoker.Fire (Boolean forceDebugEvent) [0x00000] in <filename unknown>:0 

  at BuildRestrictions+LocalPositionPerAspectRatio..ctor (AspectRatio _aspectRatio, Vector3 _localPosition) [0x00000] in <filename unknown>:0 

  at UIButton.FireEvent (.Invoker unityEvent) [0x00000] in <filename unknown>:0 

  at UIButton.OnInputUp (.UIElementInputData inputData) [0x00000] in <filename unknown>:0 

  at Replacements.Attribute.CheckParameters (System.Object element, System.Type attributeType) [0x00000] in <filename unknown>:0 

  at UnityEngine.Component.SendMessage (System.String methodName, System.Object value, SendMessageOptions options) [0x00000] in <filename unknown>:0 

  at UIElement.InputUp (.UIElementInputData inputData) [0x00000] in <filename unknown>:0 

  at UIElementManager.ActiveElementUpdate (.UIElement activeElement, .InputData inputData) [0x00000] in <filename unknown>:0 

  at UIElementManager.Update () [0x00000] in <filename unknown>:0 

  at Replacements.Attribute.CheckParameters (System.Object element, System.Type attributeType) [0x00000] in <filename unknown>:0 

Replacements.Attribute:CheckParameters(Object, Type)

UnityEngine.Component:SendMessage(String, Object, SendMessageOptions)

UIElement:InputUp(UIElementInputData)

UIElementManager:ActiveElementUpdate(UIElement, InputData)

UIElementManager:Update()

Replacements.Attribute:CheckParameters(Object, Type)

 

(Filename: currently not available on il2cpp Line: 4294967295)



后来发现是System.Enum.IsDefined的问题,果断找到原因改正

if(System.Enum.IsDefined( enumType, intParameter )) 

{}

修改为

if(IsEnumDefined( enumType, intParameter )) 

{}


bool IsEnumDefined( System.Type enumType, int value )

{

System.Enum enumValue = (System.Enum)System.Enum.ToObject( enumType, value );

System.Type underlyingType = System.Enum.GetUnderlyingType(enumType);

object checkValue = System.Convert.ChangeType(enumValue, underlyingType);

return ((int)checkValue) == value;

}


问题解决!

0 0
原创粉丝点击