2012-12-11 18 views
26

Tôi đã phải nhảy qua hoops, nhưng tôi đã gần như quản lý để có được ServiceStack làm việc trên iOS với Monotouch trong dự án của tôi. Một thời gian chạy JIT ngoại lệ được tổ chức ra:Làm thế nào để buộc Monotouch AOT Compiler để xem một phương pháp chung lồng nhau?

System.ExecutionEngineException: Attempting to JIT compile method 'ServiceStack.Text.Json.JsonTypeSerializer:GetWriteFn<int>()' while running with --aot-only. 

Các mã vi phạm là khá đơn giản:

internal WriteObjectDelegate GetWriteFn<T>() 
    { 
     return JsonWriter<T>.WriteFn(); 
    } 

Là một thử nghiệm, tôi sửa đổi mã SS để làm cho phương pháp nội bộ và các loại công và bao gồm sau đây trong mã khởi động của dự án của tôi (để thực sự được gọi).

var ick = ServiceStack.Text.Json.JsonWriter<int>.WriteFn(); 
var erk = ServiceStack.Text.Json.JsonTypeSerializer.Instance.GetWriteFn<int>(); 

Điều này vẫn không cảnh báo AOT vì lý do nào đó, tôi có ngoại lệ khi mã ở trên thực hiện! Đây có phải là vì thông số chung là một loại giá trị không? Hay là bởi vì đây là những lớp và phương thức tĩnh? Làm thế nào tôi có thể buộc Monotouch để AOT các phương pháp trên?

Mã SS trong câu hỏi là trong JsonTypeSerializer.cs và JsonWriter.Generic.cs tại địa chỉ: https://github.com/ServiceStack/ServiceStack.Text/tree/master/src/ServiceStack.Text/Json

+0

Điều này có vẻ lạ. Bạn có thể gửi một lỗi tại http://bugzilla.xamarin.com bằng một trường hợp thử nghiệm không? –

+0

Có cùng một vấn đề, cách duy nhất để sắp xếp một danh sách các số nguyên là: var serializedData = "[" + string.Join (",", Ids.ToArray()) + "]"; –

Trả lời

1

Có một số generic limitations trong MonoTouch bây giờ. Tôi nghĩ bạn nên kiểm tra mã của bạn với một trong số họ.