0

안녕하세요 저는 iPhone 응용 프로그램 개발에 익숙하지 않습니다.하지만이 질문은 related.N 전화 번호부를 사용하여 phoneNumbers (detailtextLabel)를 사용하여 사용자 이름 (textLabel)을 표시하기 위해 tableview를 사용하고 있습니다. 코스. 둘 다 별도의 배열에 저장했습니다. 또한 이메일 주소가 별도의 배열에 저장되어 있습니다. 이 모든 것을 사용하여 생성 된 테이블 뷰에 정렬 된 순서로 연락처를 성공적으로 표시 할 수 있습니다. 문제는 searchDisplayController 구현에 있습니다. 여기에 사용자 이름과 emailid (둘 중 하나)로 검색 할 수 있기를 원합니다.여러 연락처가 아닌 동일한 연락처 가져 오기

그래서 NSDictionary를 사용하여 이름 + 전자 메일을 값 (NSString 형식)으로 저장하고 키를 해당 연락처를 표시하는 행의 인덱스로 사용하고 있습니다. 이제 다음 코드를 사용하여 모든 일치하는 연락처 배열을 성공적으로 가져 왔습니다.

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope{ 

NSPredicate *resultPredicate = [NSPredicate 
           predicateWithFormat:@"SELF contains[cd] %@", 
           searchText]; 

searchResults = nil; 
matchingContacts = nil; 
NSArray *allContactValues = [allContactNamesWithEmailIDs allValues]; 
searchResults = (__bridge CFArrayRef)([[allContactValues sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] filteredArrayUsingPredicate:resultPredicate]); 
matchingContacts = [[NSMutableArray alloc] initWithArray:(__bridge NSMutableArray*)searchResults]; 

matchingContacts는 모든 일치하는 연락처 이름의 배열을 반환합니다. 모두 그러나 동일한 이름 (동일한 값 bt 다른 키)을 가진 두 명의 사용자가있을 때 이것을 사용하면 단점이 있습니다. 다른 키로 추적 할 수 없습니다. 동일한 phoneNumbers를 가진 동일한 이름을 두 번 표시하여 문제가됩니다. 세포를 만드는

코드는 다음과 같습니다

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{  static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 

} 
    if(tableView == self.searchDisplayController.searchResultsTableView){ 

     if (farmMarkets.count>0) { 
      destIndex = [[[allContactNamesWithEmailID allValues] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)] indexOfObject:matchingContacts[indexPath.row]]; //?? I believe this is what needs to be modified to display multiple contacts. Just don't know how. 

      [cell.textLabel setText:farmMarkets[destIndex]]; 

      if (destIndex<0) { 
       [cell.detailTextLabel setText:@""]; 
      } 
      else{ 
       [cell.detailTextLabel setText:phoneNumbersArray[destIndex]]; 
      } 

     } 
    } 

}

누군가가 나에게이 더 잘 구현하는 방법을 설명하는 코드 예제를 줄 수 있습니까? 모든 아이디어가 도움이 될 것입니다. 전체적으로 나는 지금 그것을 요약 할 것이다. 나는 이름과 전화 번호가있는 연락처를 표시하는 tableView와 상단의 검색 창을 구현하려고합니다. 그리고 이름이나 이메일 ID를 사용하여 검색 할 때 해당 전화 번호가있는 이름이 표시되어야합니다.

답변

0

설명을 통해 다양한 데이터 저장 방법을 사용할 수 있으며 문제는 서로 다른 시간에 서로 연관시켜야합니다.

구조를 단순화하여 배열에 사전이 포함되어있는 소스 정보의 단일 배열을 가질 수 있습니다. 각 사전은 한 사람의 모든 데이터를 포함합니다.

이제는 필요에 따라 배열을 정렬 할 수 있으며 사전에있는 키의 조합으로 정렬 할 수 있습니다. 또한 필터링 할 때 배열을 필터링 (또는 더 좋게는 원본 그대로 유지)하여 순서가 유지되고 다른 것과 상관 관계를 설정할 필요가 없습니다.

+0

검색하는 동안 NameClash를 가져 오는 문제는 해결되지 않습니다. 이것이 제가 직면하고있는 유일한 문제입니다. 나는 나머지 것들을 성공적으로 선물 할 수있다. – Roadblock

+0

배열의 항목이 고유 한 경우 충돌이 발생하지 않습니다. 현재의 충돌은 하나의 배열에 포함 된 제한된 정보 (이름 만 포함되어 있기 때문에)가 중복되는 배열 2 개를 검색하려고하기 때문에 발생합니다. – Wain