MonoTouch가 메소드를 컴파일하지 않거나 호출하도록 지정된 컴파일 된 메소드를 찾을 수없는 것처럼 보이는 이상한 문제가 있습니다. 릴리스 구성의 디바이스에서만 - 디버그 빌드가 정상입니다. 운이 좋은 간단한 코드 샘플로 재현 해 보았습니다. 따라서 아래 코드로 동작을 볼 수 있을지는 의문입니다.MonoTouch는 신비하게도 메서드와 속성을 컴파일하지 않습니까?
using System;
using MonoTouch.UIKit;
public class MyClass
{
private UINavigationController _navController;
private UIViewControler _viewController;
public UINavigationController NavController
{
get
{
if (_navController == null)
{
if (_viewController == null)
{
_viewController = new UIViewController();
}
_navController = new UINavigationController(_viewController);
}
return _navController;
}
}
}
을 그리고, 다른 방법으로 ...
public void SomeMethod()
{
MyClass myClass = new MyClass();
var navController = myClass.NavController; // <-- This is where it throws
}
내가 얻는 예외가되는 표준의 JIT 컴파일 메시지, 그것은 JIT를 시도한다는 :하지만이 내가 뭘하는지 본질적으로 get_NavController(). 나는 가상 제네릭, LINQ가 없기 때문에 링커가 꺼져 있고 JIT를 일으키는 다른 것들은 관련되어 있지 않기 때문에 매우 이상하다고 생각한다. 또한 MyClass에 정의 된 다른 메서드 및 속성에는 throw하지만 생성자 또는 System.Object
상속 된 메서드에는 throw하지 않습니다. Reflection은 myClass.GetType().GetMembers()
에 내가 기대하는 모든 것을위한 MemberInfo를 가지고 있음을 보여줍니다. 그러나 의 경우 릴리스 | iPhone에 대해서만 이러한 메서드 또는 속성에 액세스 할 수 없습니다. 필자가 볼 수있는 유일한 논리적 결론은 컴파일 컴파일 단계에서 누락 된 것이므로 릴리스 구성에서만 발생하지 않는 이유는 무엇인지 전혀 알지 못합니다.
제 질문은 그런 상황을 유발할 수있는 것이 무엇이며, 그것을 고칠 다음 단계는 무엇입니까? 여기서 디버깅을 할 때 어디로 가야할지, 버그를 파일화해야할지에 대해서는 잘 모르겠다. 왜냐하면 우리가 (훨씬) 더 큰 프로젝트의 맥락에서 그것을 재현 할 수 없기 때문이다.
업데이트 : 정확한 예외 텍스트가 요청되었습니다.
System.ExecutionException: Attempting to JIT compile method
'MyNamespace.MyClass.get_NavController()' while running with --aot-only
"NavController"의 정의를 설명 할 수 있습니까? 그것은 방법이 아니며 (흉한 것은 없으며) "getter"도 아닙니다 (get 또는 set되지 않음). 그 모든 문제가 해결 될 수 있을까요? – Krumelur
예, getter가있는 속성입니다. 내 생략을 수정하기 위해 코드를 업데이트했습니다. –