iOS 응용 프로그램에서는 핵심 데이터를 사용하고 NSFetchedResultsController를 사용하여 테이블 뷰와 연결합니다. 응용 프로그램은 "채팅"기능에 관한 것입니다.
UI는 iPhone "메시지"앱과 동일합니다. 메시지를 탭하면 히스토리와 모든 히스토리가 시간별로 그룹화되어 표시됩니다. 그 뒤에있는 논리는 이전 메시지와 현재 메시지가 1 시간 간격으로 수신 된 경우 최근 메시지에 대해 & 날짜 스탬프가 표시된다는 것입니다.
제 질문은 메시지를 그룹화하고 가져 와서 날짜 및 & 시간 스탬프와 보낸 사람 및받는 사람 메시지를 표시 할 수있는 방법입니다.iPhone 메시지 앱과 유사한 그룹화 메시지
답변
일반, 그룹 시작, 그룹 중간, 그룹 끝의 네 가지 유형의 메시지 셀 유형이 있습니다. 그룹 시작 메시지는 마지막 메시지 이후 1 시간 이상이지만 다음 메시지는 1 시간 미만입니다. 그룹 - 중간은 전후로부터 1 시간 미만입니다. 그룹 끝은 이전의 그룹쪽에 가깝지만 시간 후에는 그 뒤의 그룹쪽에 가깝습니다. 일반 일정은 한 시간 전후입니다.
이 프로젝트에는 두 부분이 있습니다. 하나는 각 유형의 셀을 올바르게 표시하는 것입니다. 다른 하나는 각 메시지가 어떤 유형인지 파악하는 것입니다. 나는 당신이 UI 물건을 스스로 알아낼 수 있다고 가정한다. (각기 다른 패딩, 정규 및 그룹 시작 시간 표시, 일부 모서리 반올림 없음 등).
각 메시지의 유형을 알아내는 것은 그다지 어렵지 않습니다. 메시지를보기 전이나 후에 보도록하십시오. 결과의 단일 실행에서 수행 할 수 있습니다 - O (n). 또한 캐시를 사용하여 느리게 처리 할 수도 있습니다 (예 : 셀로드가 메시지 전후에 메시지를 확인할 때마다 다음 번에 캐시에 응답 저장). 셀 크기가 다른 유형에 따라 다르면 estimatedRowHeight로 이상한 점프가 발생합니다. 유형을 계산 한 후에 유형의 결과를 코어 데이터에 저장할 수도 있습니다.
위와 아래 메시지 셀 유형을 무효화하고 다시 계산하려면 메시지를 삽입 할 때주의하십시오. 또한 다음 또는 이전 셀이없는 상황에 대한 메시지 셀 유형 계산시.
저는 여러분이 sectionIndexKey를 사용하여 몇몇 cleaver 트릭과 같은 일부 핵심 데이터 마법을 기대하고 있다고 생각합니다. 그러나 배열을 실행하고 계산하는 것은 실제로는 매우 간단합니다.
감사합니다. 구현에 대한 이론적 지식만큼이나 쉽지는 않습니다. Fetch 결과 컨트롤러와 함께 핵심 데이터와 그에 따라 컬렉션 뷰/테이블 뷰를 업데이트하는 것은 꽤 복잡한 솔루션입니다. – Satyam
나는 그것을했다. 약 2 주간 나를 데려 갔다. 여전히 fetchedResultsController 및 업데이트에 문제가있는 경우 먼저 100 %를 가져온 다음 닫기 메시지 그룹을 추가하는 것이 좋습니다. –
제안 해 주셔서 감사합니다. fetchedResultsController 구현은 전혀 문제가 아니며 이미 완료되었습니다. 그룹화 할 때 두 개의 메시지 사이에 날짜 및 시간 스탬프를 추가해야하며 섹션 헤더가 아닌 날짜 및 시간 스탬프가 추가되어야합니다. 그것의 정상적인 행으로 "아이폰에 메시지". 우리가 테이블 뷰를 사용하고 결과 컨트롤러를 가져 왔을 때 - 행의 수, cellForRowAtindexPath ec 메소드. 가져온 결과 배열을 기반으로합니다. 이로 인해 날짜 및 시간 스탬프가있는 행을 삽입하는 데 문제가 발생합니다. – Satyam