2

我正在使用一个开源的 json 解析器,但是在编译它时给了我取消引用的警告。

MyProject/Classes/SBJSON.m:403:13 潜在的 null 取消引用。根据“创建和返回 NSError 对象”中的编码标准,参数“错误”可能为空

- (BOOL)scanValue:(NSObject **)o error:(NSError **)error
{
skipWhitespace(c);

switch (*c++) {
    case '{':
        return [self scanRestOfDictionary:(NSMutableDictionary **)o error:error];
        break;
    case '[':
        return [self scanRestOfArray:(NSMutableArray **)o error:error];
        break;
    case '"':
        return [self scanRestOfString:(NSMutableString **)o error:error];
        break;
    case 'f':
        return [self scanRestOfFalse:(NSNumber **)o error:error];
        break;
    case 't':
        return [self scanRestOfTrue:(NSNumber **)o error:error];
        break;
    case 'n':
        return [self scanRestOfNull:(NSNull **)o error:error];
        break;
    case '-':
    case '0'...'9':
        c--; // cannot verify number correctly without the first character
        return [self scanNumber:(NSNumber **)o error:error];
        break;
    case '+':
        *error = err(EPARSENUM, @"Leading + disallowed in number");
        return NO;
        break;
    case 0x0:
        *error = err(EEOF, @"Unexpected end of string");
        return NO;
        break;
    default:
        *error = err(EPARSE, @"Unrecognised leading character");
        return NO;
        break;
}

NSAssert(0, @"Should never get here");
return NO;
}

在这里它显示了错误的取消引用。

4

1 回答 1

5

它抱怨错误参数可能是 NULL(如果调用者选择传递 NULL)。然后,声明

*error = err(EPARSENUM, @"Leading + disallowed in number");

会崩溃。一个报告的解决方法是在赋值周围放置一个 if 语句:

if(error){
    *error = err(EPARSENUM, @"Leading + disallowed in number");
}
于 2010-12-14T22:34:17.953 回答