Игра Unity на iOS ArgumentOutOfRangeException в словареC#

Место общения программистов C#
Ответить
Anonymous
 Игра Unity на iOS ArgumentOutOfRangeException в словаре

Сообщение Anonymous »

У меня есть модуль достижений для сохранения и загрузки словаря с именем достижения (ключ) и указанием того, было ли оно выполнено (логическое значение). Я использую плагин GDE (Game Data Editor) (этот).

Мой модуль отлично работает в редакторе Unity, все сохраняет и загружает. Но в iOS происходит сбой с исключением аргумента вне диапазона. Мои методы сохранения и загрузки:

Код: Выделить всё

    public void Load(){

GDEAchievementsData achievements;

if (!GDEDataManager.DataDictionary.TryGetCustom(GDEItemKeys.Achievements_Achievements, out achievements)){
Debug.LogError("Error reading save data!");
}

LoadAchievementsInDictionary(achievements);

Debug.Log("Achievement loaded data");
}

public void Save(){

GDEAchievementsData achievements;

if (!GDEDataManager.DataDictionary.TryGetCustom(GDEItemKeys.Achievements_Achievements, out achievements)){
Debug.LogError("Error reading save data!");
}

SaveDictionaryInAchievements(AchievementScript.achievements, achievements);

achievements.Set_Achievements();

Debug.Log("ACHIEVEMENTS saved data");

}

void LoadAchievementsInDictionary(GDEAchievementsData gdeData){

Debug.Log("Achievements: "+gdeData.Achievements);

if(achievements==null){
achievements = new AchievementList();
}

foreach(List achievement in gdeData.Achievements){
if(achievements.list.ContainsKey(achievement[0]))
{
achievements.list[achievement[0]] = (achievement[1]=="true")||(achievement[1]=="True");
}else{
achievements.list.Add(achievement[0], achievement[1]=="true"||achievement[1]=="True");
}
}

}

void SaveDictionaryInAchievements(AchievementList list, GDEAchievementsData gdeData){
for(int i = 0; i < gdeData.Achievements.Count; i++){
List item = gdeData.Achievements[i];
string achievementName = item[0];
item[1] = list.list[achievementName].ToString();
}

}
И ошибки, сгенерированные в отладчике XCode, для сохранения:


ArgumentOutOfRangeException: Аргумент выходит за пределы диапазона.
Имя параметра: index
в System.Collections.Generic.List`1[System.String].get_Item (индекс Int32) [0x00000] в :0
в AchievementScript.SaveDictionaryInAchievements (список .AchievementList, GameDataEditor.GDEAchievementsData gdeData) [0x00000] в :0
в AchievementScript.Save() [0x00000] в :0
в AchievementScript.OnApplicationFocus (Boolean focusStatus) [0x00000] в:0
в AchievementScript.OnApplicationPause (Boolean PauseState) [0x00000] в:0


И для загрузки:


ArgumentOutOfRangeException: аргумент выходит за пределы диапазона.
Имя параметра: index
в System.Collections.Generic.List`1 [System.String].get_Item (индекс Int32) [0x00000] в:0
в AchievementScript.LoadAchievementsInDictionary (GameDataEditor.GDEAchievementsData gdeData) [0x00000] в:0
в AchievementScript.Load() [0x00000] в :0
в AchievementScript.OnApplicationFocus (Boolean focusStatus) [0x00000] в :0


Задавая тот же вопрос для GDE, но если кто-нибудь знает, почему это происходит, было бы здорово получить некоторую информацию.

Подробнее здесь: https://stackoverflow.com/questions/302 ... dictionary
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»