Аргумент в выражении сообщения является неинициализированным значением - PullRequest
0 голосов
/ 29 февраля 2012

Код работает правильно, но я получаю предупреждение "Аргумент в выражении сообщения является инициализированным значением" для этого фрагмента кода:

    NSString *quality;
    switch(theItem.quality) {
        case 1:
            quality = @"UNDEF, Set it up!";
            break;
        case 2:
            quality = @"G, (Good)";
            break;
        case 3:
            quality = @"VG, (Very Good)";
            break;
        case 4:
            quality = @"F, (Fine)";
            break;
        case 5:
            quality = @"VF, (Very Fine)";
            break;
        case 6:
            quality = @"XF, (Extra Fine)";
            break;
        case 7:
            quality = @"UNC, (Uncirculated)";
            break;
        case 8:
            quality = @"PROOF, (Proof)";
            break;
    }

    str = [NSString stringWithFormat:@"%@", quality];

Это какая-то проблема или ничего, и я могу это игнорировать? Кроме того, это нормально для инициализации NSString таким образом -> NSString *quality;?

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Вы имели в виду «неинициализированное значение»?Если ни один из ваших операторов case не совпадает, переменная quality неинициализируется, что может привести к сбою при достижении +stringWithFormat:.Вы можете либо инициализировать quality значением по умолчанию (возможно, nil), либо вы можете предоставить default инструкцию в вашем switch, которая его инициализирует.

1 голос
/ 12 октября 2012

Вместо:

NSString *quality;  

использование:

NSString *quality = nil;

Даже если все значения определенно учтены в switch, и quality будет определенно назначено, это может быть неверно в будущем из-за изменений (в другом месте) в кодовой базе. Рекомендуется назначать значение по умолчанию, а значит и предупреждение.

Добавление регистра default: к вашему оператору переключения и присвоение значения quality по умолчанию также исправит предупреждение:

case 8:
    quality = @"PROOF, (Proof)";
    break;
default:
    quality = @"UNKNOWN QUALITY";
...