0

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% 的发生代码会中断。

4

1 回答 1

0

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

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

我们不知道 isEmptyOrNull 做了什么。

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

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

于 2016-02-05T12:11:27.417 回答