1

我为我的应用程序创建一个构建并在设备上运行。虽然它在模拟器上唤醒但不在设备上工作。并导致此错误:

  Exception in Class: BaseIOAddOn 
Line : 0 
and Method:ParseGeneralSettingsFromSettingJson 
with message Attempting to JIT compile method 'Newtonsoft.Json.Linq.JToken:Value<int> (object)' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information.

我正在使用json.NET 4.0 R3 for MonoTouch解析 json,但我不知道它尚未在设备上运行的问题是什么。

编辑:我的应用程序解决方案中没有任何组件文件夹。我从 xamaring 组件站点下载 JSON.Net dll 并将其替换为我的 Newtonsoft.JSon.monotouhch.dll 但它无法正常工作。

我在 xamarin studio 上找到了 Components 文件夹,并从此文件夹中将组件添加到应用程序中,但仍然出现上述错误。我很困惑为什么它说错误在第 0 行。

在所述第0行的异常中,但来自错误内容和我的代码优先级,我认为它来自以下代码:

try {
            Dictionary <string  ,string > generalSettings = new Dictionary <string ,string > ();
            JObject jsonUnits = JObject.Parse (Response);
            var settingsList = jsonUnits ["settings"] [SettingTypes .AppSettings.GetDescription ()];
            int i = 0;
            var tmp_factor = settingsList [i.ToString ()];
            while (tmp_factor!=null) {
                generalSettings  .Add (tmp_factor ["name"].ToString (), tmp_factor ["value"].ToString ());
                i++;
                tmp_factor = settingsList [i.ToString ()];
            }
            var addOnComplexStatus = jsonUnits["settings"][SettingTypes .GetAddon  .GetDescription ()].Value <int>("status");

            generalSettings .Add (AppConstants .XmlAddOnComplexKey.GetDescription() ,addOnComplexStatus .ToString ());

            return generalSettings;
        } catch (Exception ex) {
            Common .HandleException (ex);
            return null;
        }

尤其:

var addOnComplexStatus = jsonUnits["settings"][SettingTypes .GetAddon  .GetDescription ()].Value <int>("status");

我发现这篇文章:http ://www.brettnagy.com/post/2009/11/21/Using-JsonNET-with-MonoTouch.aspx说使用这段代码:[MonoTouch.Foundation.Preserve] 我不明白,这是什么?

4

2 回答 2

1

删除项目中对 Newtonsoft.Json.dll 的引用,如果您有项目的源 - 将其从解决方案中删除。(只是不要删除它,以防这不能解决您的问题)

在“组件”文件夹中,右键单击并选择“添加组件”。搜索 JSON.Net 并添加组件。

试试这个预编译的 DLL,看看你是否还有同样的问题。

于 2013-04-11T17:25:55.763 回答
0

感谢大家的帮助。当我更改这行代码时:

var addOnComplexStatus = jsonUnits["settings"][SettingTypes .GetAddon  .GetDescription ()].Value <int>("status");

对此:

var addOnComplexStatus = jsonUnits["settings"][SettingTypes .GetAddon  .GetDescription ()]["status"].ToString ();

问题解决了。:)

于 2013-04-13T10:00:07.827 回答