안녕하세요 저는 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를 사용하여 검색 할 때 해당 전화 번호가있는 이름이 표시되어야합니다.
검색하는 동안 NameClash를 가져 오는 문제는 해결되지 않습니다. 이것이 제가 직면하고있는 유일한 문제입니다. 나는 나머지 것들을 성공적으로 선물 할 수있다. – Roadblock
배열의 항목이 고유 한 경우 충돌이 발생하지 않습니다. 현재의 충돌은 하나의 배열에 포함 된 제한된 정보 (이름 만 포함되어 있기 때문에)가 중복되는 배열 2 개를 검색하려고하기 때문에 발생합니다. – Wain