Firebase сообщает о многихСбои на линии 0 в моей производственной сборке - это настоящие сбои? - PullRequest
0 голосов
/ 30 января 2019

Я использую websocket в своем быстром проекте, и в последние пару недель я получаю следующие сбои:

<генерируемая компилятором> строка 0

Crashed: com.MyProject.Channel
0  MYProject                         0x100e53f7c specialized    Arrayat(_:) (<compiler-generated>)
1  MYProject                         0x100e55a3c   $S6MYProject7ChannelC20checkResponseMessage33_12B1408E1049A8D244FCDCBD3CEC  8679LL08responseE0yAA0bE0C_tFyyXEfU_ (Channel.swift:137)
2  MYProject                         0x100ce3de8 $SIg_Ieg_TR (<compiler-generated>)
3  MYProject                         0x100ce3e08 $SIeg_IyB_TR (<compiler-generated>)

Больше информации из кода:

Channel.TMLock.sync {
        var idx = 0
        for msg in Channel.trackedMsgs {
            mt = msg
            if msg.isResponseTo(responseMessage: responseMessage) {
                Channel.trackedMsgs.remove(at: idx)
                break
            }

            idx += 0
        }
    }

Channel.swift:137 => Channel.trackedMsgs.remove(at: idx)

У кого-нибудь есть идеи по этому поводу?

1 Ответ

0 голосов
/ 05 августа 2019
Channel.TMLock.sync {
    var idx = 0
    for msg in Channel.trackedMsgs {
        mt = msg
        if msg.isResponseTo(responseMessage: responseMessage) {
            Channel.trackedMsgs.remove(at: idx) -> Removing elements while iteration will cause crash
            break
        }

        idx += 0
    }
}

вы можете переписать это как:

Channel.TMLock.sync {
        var idx = 0
        var indexOfElement = 0
        while indexOfElement < Channel.trackedMsgs.length{
        mt = msg
        if msg.isResponseTo(responseMessage: responseMessage) {
                Channel.trackedMsgs.remove(at: idx)
                break
            }

            idx += 0
            indexOfElement += 1
        }
    }
...