Intereting Posts
Как проверить, вызван ли блок Внутри UITabBarController как я перехожу из одного контроллера представления в другой и сохраняю панель вкладок? EXC_BAD_ACCESS с MKNetworkEngine Экран ориентации IOS перепутался после съемки с использованием ввода файла Html Данные о движении iPhone заблокированы параметром Calass Calibration Передайте значение из сценария запуска в Xcode для компиляции iOS iAP Загрузка загруженного контента не работает Будет ли мое приложение принято в магазине приложений, если оно будет использоваться как UIBackgroundMode? Сбой переполнения стека VectorKit MapKit Изменить тег html в NSString Распознаватель жестов для разрешения горизонтальных прокруток на экране карты Какие символы должны быть экранированы в Localizable.strings IOS Programmatic Zoom в UIScrollView не работает Неправильная область прокрутки при редактировании UITextField в UITableViewController Изменить значение метки в UICollectionView без перезагрузки данных?

ExecutionEngineException: попытка JIT-метода компиляции 'System.Collections.Generic.Dictionary'

В моей игре unity3d у меня есть следующий словарь:

public Dictionary<string, List<UpgradeData>> upgradeList; 

где UpgradeData – очень простой класс:

 public class UpgradeData { public bool lockStatus; public bool purchased; } 

Я читаю здесь, что вы не можете использовать типы значений в качестве словарных ключей, но насколько я знаю, что укуса не является типом значений. Поэтому проблема должна исходить из использования List в качестве значения словаря. Любая идея, как обойти это. Код работает как на платформе Windows, так и на MacOS. Я пытаюсь сериализовать этот Словарь с помощью бинарного форматирования. У меня были аналогичные проблемы с сериализацией других классов, но мне удалось это исправить, добавив:

  if (Application.platform == RuntimePlatform.IPhonePlayer) { System.Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes"); } 

Что мне нужно сделать, чтобы сериализовать словарь?

Изменить: Забыл включить весь класс, который работает с Словарем

 [Serializable] public class CharacterUpgradeList { private UpgradeData[] _upgrade_Data; private List<UpgradeData>[] upgData; public Dictionary<string, List<UpgradeData>> upgradeList; public CharacterUpgradeList() { upgData = new List<UpgradeData>[4]; for (int i = 0; i < upgData.Length; i++) { upgData[i] = new List<UpgradeData> { new UpgradeData(), new UpgradeData(), new UpgradeData(), new UpgradeData(), new UpgradeData(), new UpgradeData() }; } upgradeList = new Dictionary<string, List<UpgradeData>> { {"Man",upgData[0]}, {"Woman",upgData[1]}, {"Boy",upgData[2]}, {"Girl",upgData[3]} }; } } 

и затем я создаю объект из вышеупомянутого класса в этом классе:

 [Serializable] class GameData { public int _coinAmount, _upgradeLevel; public Level_Data[] _level_Data; public CharacterUpgradeList _charUpgradeList; public SerialVector2 serialVector; public GameData() { _charUpgradeList = new CharacterUpgradeList(); } } 

И я пытаюсь сериализовать GameData.

Solutions Collecting From Web of "ExecutionEngineException: попытка JIT-метода компиляции 'System.Collections.Generic.Dictionary'"

BinaryFormatter опирается на компиляцию JIT, которая не поддерживается в iOS. Проблема заключается не в ваших структурах данных, а в ограничениях функций платформы.

Вам придется использовать другую библиотеку сериализации, которая поддерживает полную компиляцию AOT. Мне повезло с JsonFx . Некоторые люди рекомендовали protobuf-net .