For Loop Quitting提前退出

时间:2011-11-30 17:38:28

标签: iphone objective-c for-loop

这是我的循环

-(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(它是一个bool)并再次运行方法“analyzeDataWithSearchTerm”,则似乎会出现问题。

此循环基本上会检查商品是否已在采购订单中。如果不是,则提供要添加的项目。下次扫描该项目时,循环运行并通过,并应检测该项目是否在采购订单中。我设置了断点,但第二次循环运行(顺序中只有2项)它找到一个结果,到达行foundResult = TRUE,没有将bool设置为true,整个方法只是停止。它甚至从未实现过

if (foundResult) { }

为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

  

如果我设置&#34; isScanning&#34;似乎会出现问题。为真(它是一个   bool)并运行方法&#34; analyzeDataWithSearchTerm&#34;第二次。

如果您在问题发生时确认此,而不仅仅是似乎发生时,那将会很有帮助。假设是这种情况,我们最需要看到的代码就是内部的代码:

if (isScanning) {
//do something different
}

最合乎逻辑的结论是“做出不同的事情”#34;正在改变循环中检查的条件,例如可能从itemIDRows(我认为是NSArray或NSMutableArray)中删除对象,或者导致释放NSArray / NSMutableArray对象。

您对!= NSNotFound的使用对我来说似乎是一个奇怪的考验,可能是您遇到问题的原因。如果除了NSNotFound之外还有其他错误,您可以满足此条件,但例如可以在[itemIDRows objectAtIndex:i]上停止。如果您将逻辑更改为匹配两个字符串,而不是无法匹配,我怀疑您的错误将消失或其他地方产生的问题将更清楚地突出显示问题。