2011-11-30 115 views
-1

這裏是我的循環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

回答

0

這個問題似乎是,如果我設置了「isScanning」爲真(這是一個 布爾)發生和運行的方法「analyzeDataWithSearchTerm」第二次。

這將是有益的,如果你能確認這時出現的問題,並不僅僅是它似乎時出現的那樣。假設是這樣的話,將一段代碼,我們最需要看到的是無論是在這裏面:

if (isScanning) { 
//do something different 
} 

最合乎邏輯的結論是,一些在「做不同的事情」正在發生變化的條件,否則將在你的循環中檢查,例如可能從itemIDRows(我認爲它是NSArray或NSMutableArray)中刪除對象,或者導致NSArray/NSMutableArray對象被釋放。

您對!= NSNotFound的使用對我來說似乎是一個奇怪的測試,可能是您的問題的原因。如果除NSNotFound之外還有其他錯誤,則可以符合此標準 - 但例如可以在[itemIDRows objectAtIndex:i]上停頓。如果您更改邏輯以匹配兩個字符串,而不是未能匹配,我懷疑您的錯誤要麼會消失,要麼導致其他問題會更清楚地突出顯示問題。

+0

不,它是definatley,因爲我的一個數組缺少一個對象。在找到結果後,該方法會簡單地退出。它永遠不會達到如果(isScanning),所以沒有它是錯的。 – Hackmodford