Acknowledged
over 1 year ago

accessing dictionary data is not consistent

this code (I can't reproduce real error on sim or my watch, so snippet)

var d = {0 => "t"), x;

x = d[1];

on some devices causes Array Out Of Bounds Error but

x = d.get(1);

returns null, as is expected.

Error Name: Array Out Of Bounds Error

Occurrences: 20

First Occurrence: 2023-12-10

Last Occurrence: 2023-12-10

Devices:

Venu® Sq. Music Edition: 4.90

fēnix® 6 Pro / 6 Sapphire / 6 Pro Solar / 6 Pro Dual Power / quatix® 6: 26.00

fēnix® 5 Plus: 19.30

Forerunner® 945: 13.00

Forerunner® 945: 13.00

App Versions: 8.6.0

Languages: chs, eng, ita, jpn, spa

Error Name: Array Out Of Bounds Error

Occurrences: 10

First Occurrence: 2023-12-10

Last Occurrence: 2023-12-10

Devices:

Upcoming Wearable: 15.21

Forerunner® 955 / Solar: 17.26

App Versions: 8.6.0

Languages: eng, jpn

  • A dictionary is an associative array.  Key, value pairs. You are using the [key] notation to retrieve the value which is fine. But I’d expect if you decide to use the array notation and use numeric keys then you’ll see what you’re seeing.  Have you tried using Monkey types to see if it changes the behaviour!

  • dictionary d

    - dictionary -> saving to the storage -> reading from the storage -> array

    - webreq -> json -> array

  • what do you mean system returns array instead of dict? What system? Do you get d from some api call? Which one?

  • so  after changing d[] to d.get

    Error Name: Symbol Not Found Error
    Occurrences: 3
    First Occurrence: 2023-12-11
    Last Occurrence: 2023-12-11
    Devices:
        Venu® Sq 2 Music: 2.59
        fēnix® 7X / tactix® 7 / quatix® 7X Solar / EnduroTm 2: 15.74
    App Versions: 8.6.1
    Languages: deu, jpn

    It means system returns array instead of dictionary.

    I had 2 cases with the same problem - reading values from dictionary

    - previous saved to storage

    - converted from json aftere webreq