Левый операнд '==' является значением мусора

Я получаю эту ошибку при анализе проекта ios

The left operand of '==' is a garbage value

это то, как код выглядит там, где он происходит. Этот метод используется для сортировки массива, который у меня есть, который возвращается мне из БД.

- (NSMutableArray *)startSortingTheArray:(NSMutableArray *)unsortedArray
{
    [unsortedArray sortUsingComparator:^ NSComparisonResult(SearchResultItem *d1, SearchResultItem *d2) {
        //initalize comparison
        NSComparisonResult result;

        NSInteger manufacturerID1 = d1.manufacturerID;
        NSInteger manufacturerID2 = d2.manufacturerID;
            if (manufacturerID1 > manufacturerID2)
                return NSOrderedAscending;
            if (manufacturerID1 < manufacturerID2)
                return NSOrderedDescending;
            if (manufacturerID1 == manufacturerID2) {

            NSString *model1 = d1.model;
            NSString *model2 = d2.model;
            result = [model1 localizedCompare:model2];
        }
        if (result == NSOrderedSame) {
//..

2 ответа

Решение

Компилятор жалуется, потому что считает возможным достичь == сравнение перед result имеет значение.

Лучший вариант, учитывая ваш код, это использовать else if а также else:

if (manufacturerID1 > manufacturerID2)
    return NSOrderedAscending; // we won't reach the comparison so result doesn't matter
else if (manufacturerID1 < manufacturerID2)
    return NSOrderedDescending; // we won't reach the comparison so result doesn't matter
else {
    NSString *model1 = d1.model;
    NSString *model2 = d2.model;
    result = [model1 localizedCompare:model2]; // in any other case, result will be set.
}
...

Или вы могли бы сделать это:

NSComparisonResult result;
...
if (manufacturerID1 > manufacturerID2)
    return NSOrderedAscending;
else if (manufacturerID1 < manufacturerID2)
    return NSOrderedDescending;

NSString *model1 = d1.model;
NSString *model2 = d2.model;
result = [model1 localizedCompare:model2];
...

Или даже это:

if (manufacturerID1 > manufacturerID2)
    return NSOrderedAscending;
else if (manufacturerID1 < manufacturerID2)
    return NSOrderedDescending;

NSComparisonResult result = [d1.model localizedCompare:d2.model];
...

Таким образом, компилятор знает, что если сравнение достигнуто, значение result будет уже установлено.

Я думаю, что это просто "решатель" lvm, который не понимает, что именно одно из <,>или == должно быть верным в сравнении с производителями ID[12]. Попробуйте удалить if (manufacturerID1 == manufacturerID2) блок, так что он может сказать, что значение result не используется неинициализированным. Несмотря на ваш комментарий, вы на самом деле не инициализируете его значение.

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