У меня есть собственный проект web / ios реагирует. В сети это работает без проблем, но на iOS я получаю сообщение об ошибке. Странно, я не вижу ошибку вообще в окне отладки, поэтому мне приходится полагаться на красный экран.
Способ сохранения данных выглядит следующим образом:
console.log(`user progress: writing string of >>${JSON.stringify(user.progress)}<< original's type: '${typeof user.progress}'`)
await AsyncStorage.setItem(
appConfig.constants.graphcool.progress,
user.progress
)
И этот журнал - последний журнал, который я вижу в отладчике:
пользовательский прогресс: запись строки >> {"VocabularyPairs": {"1": 0.984375, "2": 0.996875, "3": 0.875}} << тип оригинала: 'объект' </p>
В iOS появляется красный экран с ошибкой:
Exception '-[NSDictionaryM length]: unrecognized selector sent to instance 0x2832c5ce0' was thrown while invoking multiSet on target AsyncLocalStorage with params (
(
(
progress,
{
VocabularyPairs = {
1 = "0.984375";
2 = "0.996875";
3 = "0.875";
};
}
)
),
311
)
Итак, я могу это исправить, изменив код:
await AsyncStorage.setItem(
appConfig.constants.graphcool.progress,
Platform.OS === 'ios' ? JSON.stringify(user.progress): user.progress
)
Но мой вопрос: зачем мне это? Если я исправлю это, есть два других места, которые также устанавливают этот же элемент - одно уже имеет эту обертку, другое не имеет. Оба работают, и это всегда почти те же самые данные - числа (то есть значения) могут меняться, но они везде являются строковыми ключами и числовыми значениями.
Что делает первую запись особенной?