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;
}
问题解决!