2011-12-13 10 views
2

MonoTouch의 Debug | iPhone 옵션을 통해 iOS 장치에서 응용 프로그램을 실행하려고합니다. 그러나 우리는 문제를 아주 빨리 해결합니다. 다음과 같은 예외가LINQ가있는 장치에서 Monotouch JIT 오류

Attempting to JIT compile method "System.Linq.Enumerable:<FirstOfDefault`1>m_13<int> (int)" while running with aot-only. 

와 응용 프로그램 충돌이 지금은이 문제가 실제 iOS 장비에 허용되지 않는 일반적인 일부가되는 JIT에서 온다 이해합니다. 내가 그것을 알아낼 수없는 것은 그것을 고치는 방법이다.

int nextTag = (from tag in _cellControllers.Keys 
    where tag > currentTag 
    select tag).FirstOrDefault(); 

_cellControllers는이

Dictionary <int, UITableViewSource> 

가 어떻게 발생이 오류를 방지 할 수 있습니다 : 아래

는 충돌 코드입니다?

+0

정확히 어떤 종류의 일반 사전입니까? –

+0

내 초기 게시물을 참조하십시오. 그것을 편집해야했기 때문에 stackoverflow에서 형식을 지정하기 때문에 형식이 표시됩니다. ㅎ :) – Kroan

답변

5

here과 같이 사전에 키로 값 유형이있는 것이 문제입니다. 사전을 변경하여 값 유형을 키로 사용하지 않으면이 경우가 작동 할 수 있습니다 (불행히도 LINQ는 자체적으로 사전을 사용하므로 쿼리를 다시 작성해야합니다).

LINQ를 사용하는 동안 이러한 문제를 해결하기 위해 노력하고 있으므로 컴파일 가능한 테스트 케이스로 filing a bug을 제안하여 앞으로 귀하의 케이스가 제대로 작동하도록 할 수 있습니다.

+0

안녕하세요. 사전 대신 목록을 사용하도록 코드를 다시 작성했습니다. 다른 방법으로 태그를 검색 할 수 있었기 때문입니다. 이 고정 된 내 문제와 LINQ 코드는 이제 정상적으로 작동합니다. 고마워요! – Kroan

3
당신은 가능성이 타격

AOTlimitation AOT 컴파일러가 제대로 유형이 실행시에 일할 수있는 코드를 보장하기 위해 미리 컴파일를 결정 할 수 없었던 경우 (이 one 같은).

어떻게하면이 오류가 발생하지 않도록 할 수 있습니까?

해결 방법은 정확한 제한 사항에 따라 다릅니다. LINQ 쿼리는 많은 일리노이 코드를 생성하므로 개발자 (또는 적절한 컴파일러)가 생성되는 내용이 항상 명확하지는 않습니다. 이로 인해 문제 해결이 조금 더 어려워졌습니다.

이러한 문제의 맨 아래에 우리는 정보가 필요하기 때문에 버그 보고서를 작성하면 http://bugzilla.xamarin.com에 훨씬 좋습니다. 예 : 로, 터미널에 출력을 붙여 복사

/Developer/MonoTouch/usr/bin/mtouch --logdev 

그런 다음 응용 프로그램 충돌 및 실행/:

가장 중요한 부분은 단말기 창에서 다음을 실행하여 얻을 수있는 장치 로그입니다 버그 보고서 (또는 첨부 파일로 추가).