我为我的应用程序创建了一个构建并在设备上运行。虽然它是在模拟器上工作但不在设备上工作。并导致此错误:
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工作室找到了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]
我不明白,这是什么?
答案 0 :(得分:1)
删除项目中对Newtonsoft.Json.dll的引用,如果您有项目源,请将其从解决方案中删除。 (只是不要删除它,以防这不能解决您的问题)
在“组件”文件夹中,右键单击并选择“添加组件”。搜索JSON.Net并添加组件。
尝试使用此预编译的DLL,看看是否仍有相同的问题。
答案 1 :(得分:0)
感谢大家的帮助。 当我改变这行代码时:
var addOnComplexStatus = jsonUnits["settings"][SettingTypes .GetAddon .GetDescription ()].Value <int>("status");
到此:
var addOnComplexStatus = jsonUnits["settings"][SettingTypes .GetAddon .GetDescription ()]["status"].ToString ();
问题解决了。 :)