Прерывистый сбой: - setObjectForKey: объект не может быть равен нулю (ключ:ref_id)

Объект ref_id - это строка / число в ответе JSON. Один и тот же код работает большую часть времени. Но иногда это дает сбой (~ менее 5%).

      NSDictionary *udfDict = nil;
        if (data) {
            if ([data length] > 0) {
                udfDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&serializationError];
            }
        }

        if (udfDict) {
            NSString *transactionreason;
            NSString *refId;
            if (![CustomUtilities isEmptyOrNull:udfDict[@"ref_id"]]) {

                refId = udfDict[@"ref_id"];
                [dict setObject:refId forKey:@"ref_id"];
}

Обеспокоенность: если не удается уменьшить число от строки к строке, код должен постоянно ломаться. Но это не так. Авария прерывистая, и разрывы кода происходят только в течение ~5% случаев.

1 ответ

Проверка данных!= Nil не нужна. Но сделайте себе и читателям своего кода услугу и напишите if (data!= Nil), а не if (data). Это варварство. То же самое для udfDict. длина является свойством, поэтому data.length не [длина данных]. Почему вы читаете изменчивые контейнеры? Это какой-то код, который вы скопировали и не поняли?

Ваш код потерпит крах, если данные JSON будут массивом.

Мы не знаем, что делает isEmptyOrNull.

Почему setObject, а не dict [@"ref_id"] = ...?

И я не вижу здесь никаких цифр. В чем собственно проблема?

Другие вопросы по тегам