2017-04-11 15 views
0

iOS 응용 프로그램에서는 핵심 데이터를 사용하고 NSFetchedResultsController를 사용하여 테이블 뷰와 연결합니다. 응용 프로그램은 "채팅"기능에 관한 것입니다.

UI는 iPhone "메시지"앱과 동일합니다. 메시지를 탭하면 히스토리와 모든 히스토리가 시간별로 그룹화되어 표시됩니다. 그 뒤에있는 논리는 이전 메시지와 현재 메시지가 1 시간 간격으로 수신 된 경우 최근 메시지에 대해 & 날짜 스탬프가 표시된다는 것입니다.

제 질문은 메시지를 그룹화하고 가져 와서 날짜 및 & 시간 스탬프와 보낸 사람 및받는 사람 메시지를 표시 할 수있는 방법입니다.iPhone 메시지 앱과 유사한 그룹화 메시지

답변

0

일반, 그룹 시작, 그룹 중간, 그룹 끝의 네 가지 유형의 메시지 셀 유형이 있습니다. 그룹 시작 메시지는 마지막 메시지 이후 1 시간 이상이지만 다음 메시지는 1 시간 미만입니다. 그룹 - 중간은 전후로부터 1 시간 미만입니다. 그룹 끝은 이전의 그룹쪽에 가깝지만 시간 후에는 그 뒤의 그룹쪽에 가깝습니다. 일반 일정은 한 시간 전후입니다.

이 프로젝트에는 두 부분이 있습니다. 하나는 각 유형의 셀을 올바르게 표시하는 것입니다. 다른 하나는 각 메시지가 어떤 유형인지 파악하는 것입니다. 나는 당신이 UI 물건을 스스로 알아낼 수 있다고 가정한다. (각기 다른 패딩, 정규 및 그룹 시작 시간 표시, 일부 모서리 반올림 없음 등).

각 메시지의 유형을 알아내는 것은 그다지 어렵지 않습니다. 메시지를보기 전이나 후에 보도록하십시오. 결과의 단일 실행에서 수행 할 수 있습니다 - O (n). 또한 캐시를 사용하여 느리게 처리 할 수도 있습니다 (예 : 셀로드가 메시지 전후에 메시지를 확인할 때마다 다음 번에 캐시에 응답 저장). 셀 크기가 다른 유형에 따라 다르면 estimatedRowHeight로 이상한 점프가 발생합니다. 유형을 계산 한 후에 유형의 결과를 코어 데이터에 저장할 수도 있습니다.

위와 아래 메시지 셀 유형을 무효화하고 다시 계산하려면 메시지를 삽입 할 때주의하십시오. 또한 다음 또는 이전 셀이없는 상황에 대한 메시지 셀 유형 계산시.

저는 여러분이 sectionIndexKey를 사용하여 몇몇 cleaver 트릭과 같은 일부 핵심 데이터 마법을 기대하고 있다고 생각합니다. 그러나 배열을 실행하고 계산하는 것은 실제로는 매우 간단합니다.

+0

감사합니다. 구현에 대한 이론적 지식만큼이나 쉽지는 않습니다. Fetch 결과 컨트롤러와 함께 핵심 데이터와 그에 따라 컬렉션 뷰/테이블 뷰를 업데이트하는 것은 꽤 복잡한 솔루션입니다. – Satyam

+0

나는 그것을했다. 약 2 주간 나를 데려 갔다. 여전히 fetchedResultsController 및 업데이트에 문제가있는 경우 먼저 100 %를 가져온 다음 닫기 메시지 그룹을 추가하는 것이 좋습니다. –

+0

제안 해 주셔서 감사합니다. fetchedResultsController 구현은 전혀 문제가 아니며 이미 완료되었습니다. 그룹화 할 때 두 개의 메시지 사이에 날짜 및 시간 스탬프를 추가해야하며 섹션 헤더가 아닌 날짜 및 시간 스탬프가 추가되어야합니다. 그것의 정상적인 행으로 "아이폰에 메시지". 우리가 테이블 뷰를 사용하고 결과 컨트롤러를 가져 왔을 때 - 행의 수, cellForRowAtindexPath ec 메소드. 가져온 결과 배열을 기반으로합니다. 이로 인해 날짜 및 시간 스탬프가있는 행을 삽입하는 데 문제가 발생합니다. – Satyam