Для выхода из цикла преждевременно - PullRequest
0 голосов
/ 30 ноября 2011

Вот мой цикл

-(void)analyzeDataWithSearchTerm:(NSString *)searchTerm {

    [searchResults removeAllObjects];

    NSLog(@"number of items = %i", [itemIDRows count]);

    for (int i = 0; i < [itemIDRows count]; i++) {

        bool foundResult = FALSE;
        if ([[[itemIDRows objectAtIndex:i] lowercaseString] rangeOfString:[searchTerm lowercaseString]].location != NSNotFound) {
            NSLog(@"ID matches %@", [itemIDRows objectAtIndex:i]);
            foundResult = TRUE;
        }
        if ([[[itemNameRows objectAtIndex:i] lowercaseString] rangeOfString:[searchTerm lowercaseString]].location != NSNotFound) {
            NSLog(@"name Matches %@", [itemNameRows objectAtIndex:i]);
            foundResult = TRUE;
        }
        if ([[[barcodeRows objectAtIndex:i] lowercaseString] rangeOfString:[searchTerm lowercaseString]].location != NSNotFound) {
            NSLog(@"barcode Matches %@", [barcodeRows objectAtIndex:i]);
            foundResult = TRUE;
        }
        if ([aliasRows objectAtIndex:i] != [NSNull null]) {
            if ([[[aliasRows objectAtIndex:i] lowercaseString] rangeOfString:[searchTerm lowercaseString]].location != NSNotFound) {
                NSLog(@"alias Matches %@", [aliasRows objectAtIndex:i]);
                foundResult = TRUE;
            }
        }

        if (foundResult) {
            NSNumber *result = [NSNumber numberWithInt:i];
            NSLog(@"found result");
            [searchResults addObject:result];

        } else {
            NSLog(@"no result was found this time");
        }
    }

    if (isScanning) {
    //do something different
    }
}

Похоже, проблема возникает, если я установил для isScanning значение true (это бул) и снова запустил метод analysisDataWithSearchTerm.

По сути, этот цикл проверяет, находится ли элемент в заказе на покупку. Если нет, то элемент предлагается добавить. В следующий раз, когда товар сканируется, цикл проходит и проходит, и должен обнаружить, что товар находится в заказе на покупку. Я установил точки останова, но во второй раз, когда цикл запускается (только 2 элемента в порядке), он находит один результат, попадает в строку foundResult = TRUE, не устанавливает bool в true, и весь метод просто останавливается. Он даже не доходит до

if (foundResult) { }

Есть идеи, почему это может происходить?

1 Ответ

0 голосов
/ 30 ноября 2011

Проблема возникает, если я установил для isScanning значение true (это bool) и запустите метод "analysisDataWithSearchTerm" во второй раз.

Было бы полезно, если бы вы могли подтвердить, что это равно , когда возникает проблема, а не только то, что кажется , когда она возникает. Предполагая, что это так, фрагмент кода, который нам больше всего нужно увидеть, находится внутри:

if (isScanning) {
//do something different
}

Наиболее логичным выводом является то, что что-то в «сделать что-то другое» изменяет условия, которые в противном случае были бы проверены в вашем цикле, например, возможно, удаление объектов из itemIDRows (который я предполагаю, является NSArray или NSMutableArray) или вызывать это NSArray / NSMutableArray объект, который будет выпущен.

Ваше использование != NSNotFound кажется мне странным испытанием и, вероятно, причиной ваших проблем. Вы могли бы соответствовать этому критерию, если была другая ошибка, отличная от NSNotFound, но, например, могла бы остановиться на [itemIDRows objectAtIndex:i]. Если вы измените свою логику так, чтобы она соответствовала двум строкам, а не , если она не совпадает с , я подозреваю, что ваша ошибка либо исчезнет, ​​либо возникшая проблема в другом месте более четко выделит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...