间歇性崩溃: - setObjectForKey:对象不能为nil(key:ref_id)

时间:2016-02-05 10:19:02

标签: ios xcode crash intermittent

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 个答案:

答案 0 :(得分:0)

测试是否数据!= nil是不必要的。但是你自己和你的代码的读者一个忙,写if if(data!= nil)而不是if(data)。这是野蛮的。对于udfDict也是如此。 length是一个属性,所以data.length不是[data length]。你为什么要读可变容器?这是您复制并且不了解的一些代码吗?

如果JSON数据是一个数组,您的代码将崩溃。

我们不知道isEmptyOrNull的作用。

为什么setObject而不是dict [@" ref_id"] = ...?

我在这里看不到任何数字。实际问题是什么?