2012-07-26 4 views
1

현재 테이블에 표시된 DB의 데이터를 사용하여 UISearchBar의 검색 기능을 코딩하고 있습니다. 검색 결과를 찾아서 NSMutableArray *searchResults에 저장합니다. 여기에 보이는 방법은 다음과 같습니다 NSMutableArray에서 NSString을 검색 할 때 NSMutableArray에서 객체의 인덱스를 어떻게 결정합니까?

- (void) searchGrapesTableView { 
    [searchResult removeAllObjects]; 
    numSearchWines=0; 
    for (NSString *str in listOfWines) 
    { 
     NSRange titleResultsRange = [str rangeOfString:searchBar.text options:NSCaseInsensitiveSearch]; 
     if (titleResultsRange.length > 0) { 
      [searchResult addObject:str]; 
      numSearchWines++; 
     } 
    } 
} 

listOfWines

도에서 검색 할 수있는 모든 이름의 목록을 포함하는있는 NSMutableArray이다. 이상적으로, 일치하는 값을 가진 객체의 인덱스를 listOfWines에서 결정하고 다른 NSMutableArray에 추가하여 나중에 쉽게 액세스 할 수 있도록하고 싶습니다. 중복 된 항목이 listOfWines (그리고 이후 searchResult)에있는 경우

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"wineCell"]; 
    //determine how many to add to get the grape ID 
    NSInteger grapeID=0; 
    for (int i=0; i<indexPath.section; i++) { 
     grapeID += [self.tableView numberOfRowsInSection:i]; 
    } 

    Wines *currentWine; 
    if (isSearchOn) { 
     NSString *cellValue = [searchResult objectAtIndex:(grapeID+indexPath.row)]; 
     NSInteger index = 0; 
     index = [listOfWines indexOfObject:cellValue]; 
     currentWine = [allWines objectAtIndex:(index)]; 
    } 

    else { 
     currentWine = [allWines objectAtIndex:(grapeID+indexPath.row)]; 
    } 

    cell.textLabel.text = currentWine.name; 
    return cell; 
} 

불행하게도이 작동하지 않습니다 예를 들어, 나중에 내가이 검색 데이터를 사용하여 테이블 셀을 표시 할 때에, 나는 다음과 같은 코드가 있습니다. 그건 내가 이런 일을 할 수 있도록이, 또한 예를 들어,있는 NSMutableArray가 searchResultID 이름, 자신의 인덱스가 너무 유용 할 이유는 다음과 같습니다

NSInteger theResultID = [searchResultID objectAtIndex:(grapeID+indexPath.row)]; 
currentWine = [allWines objectAtIndex:theResultID]; 
+0

지금'[searchResult addObject : str];'이 (가) for 루프 외부에 있습니다. 이것이 문제의 원인 일 수 있습니까? – CaldwellYSR

+0

그건 오타입니다. 위의 내용을 수정하겠습니다. – lemontwist

+0

생각해 보았습니다 ... 지금 obj-c의 초보자입니다. 그래서 내가 잘못 본 유일한 것입니다.) – CaldwellYSR

답변

5

이 indexesOfObjectsPassingTest위한 작업 같은 소리를 :. NSArray 문서에서 확인해야합니다. 당신은이 같은 것을 사용 :

NSIndexSet *indxs = [allWines indexesOfObjectsPassingTest: ^BOOL(NSString *obj, NSUInteger idx, BOOL *stop) { 
     return [obj isEqualToString:searchBar.text]]; 
    }]; 

그래서 의지 allWines 모든 값을 통해 루프 (필자는 객체가 문자열 있으리라 믿고있어) 당신에게 인덱스를 제공, 검색 문자열과 일치하는 어떤의 인덱스를 반환 발견 된 모든 색인으로 설정하십시오.

+0

이것은 지금까지 큰 소리. 그것을 시도하기 위하여 가고있다. 답변 해주셔서 감사합니다! 이런 일이 있었는지 궁금 해서요! – lemontwist

관련 문제