AsyncStorage работает на реагировать на родную сеть, не работает на IOS (строковые данные JSON) - PullRequest
0 голосов
/ 25 марта 2019

У меня есть собственный проект 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
)

Но мой вопрос: зачем мне это? Если я исправлю это, есть два других места, которые также устанавливают этот же элемент - одно уже имеет эту обертку, другое не имеет. Оба работают, и это всегда почти те же самые данные - числа (то есть значения) могут меняться, но они везде являются строковыми ключами и числовыми значениями.

Что делает первую запись особенной?

1 Ответ

0 голосов
/ 25 марта 2019

Если вы используете AsyncStorage.setItem, значение должно быть string . Передача объекта вместо строки не должна работать!

  AsyncStorage.setItem(key: string, value: string, [callback]: ?(error: ?Error) => void)

СКАЧАТЬ ДОКУМЕНТЫ ЗДЕСЬ

...