For循环退出过早

问题描述:

这里是我的循环For循环退出过早

-(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”为真(这是一个布尔)发生和运行的方法“analyzeDataWithSearchTerm”第二次。

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

if (foundResult) { }

任何想法,为什么这可能发生?

+0

该应用程序是否错误并退出或继续运行? – BWC

+0

它一直运行得很好......只是这种方法在没有实际完成的情况下退出。 – Hackmodford

+1

哪个“foundResult = TRUE”是这种情况?在ifScanning块内发生了什么?第一个是 – Rayfleck

这个问题似乎是,如果我设置了“isScanning”为真(这是一个 布尔)发生和运行的方法“analyzeDataWithSearchTerm”第二次。

这将是有益的,如果你能确认这时出现的问题,并不仅仅是它似乎时出现的那样。假设是这样的话,将一段代码,我们最需要看到的是无论是在这里面:

if (isScanning) { 
//do something different 
} 

最合乎逻辑的结论是,一些在“做不同的事情”正在发生变化的条件,否则将在你的循环中检查,例如可能从itemIDRows(我认为它是NSArray或NSMutableArray)中删除对象,或者导致NSArray/NSMutableArray对象被释放。

您对!= NSNotFound的使用对我来说似乎是一个奇怪的测试,可能是您的问题的原因。如果除NSNotFound之外还有其他错误,则可以符合此标准 - 但例如可以在[itemIDRows objectAtIndex:i]上停顿。如果您更改逻辑以匹配两个字符串,而不是未能匹配,我怀疑您的错误要么会消失,要么导致其他问题会更清楚地突出显示问题。

+0

不,它是definatley,因为我的一个数组缺少一个对象。在找到结果后,该方法会简单地退出。它永远不会达到如果(isScanning),所以没有它是错的。 – Hackmodford