0

나는 NSArrayController의 내용을 표시하는 NSArrayControllerNSTableView이 바인딩 된 주 응용 프로그램에 대해 managedObjectContext를 가지고 있습니다.mergeChangesFromContextDidSaveNotification NSTableView에 두 컨텍스트를 모두 간략하게 표시합니다.

정기적으로 웹 서버에서 최신 데이터를 가져 오는 두 번째 managedObjectContext이있는 백그라운드 스레드를 사용합니다. 데이터가 백그라운드 스레드에서 반환되고 구문 분석되면 mergeChangesFromContextDidSaveNotification 이후에 기본 컨텍스트와 병합됩니다.

알림이 실행 된 직후 (병합 중에 가정 함) 테이블에 모든 항목의 중복 항목이 표시됩니다 (두 상황이 동시에 두 데이터를 모두 표시하는 경우 정확합니다). 몇 초 후에 테이블에 데이터가 올바르게 표시되고 중복 된 내용이 제거됩니다.

NSArrayController은 병합을 진행할 때 컨텍스트를 관찰하고 병합 전/후에 병합 파일을 표시 할 수 있습니다.

병합이 완료 될 때까지 어레이 컨트롤러가 자동으로 업데이트되지 않도록 허용 할 수있는 방법이 있습니까?

IB 바인딩 외부에서이 작업을 수행하고 어레이 컨트롤러를 강제로 업데이트 할 수는 있지만 바인딩이나 병합 과정에서 약간 잘못된 작업을 수행해야합니다.

많은 도움이나 제안을 부탁드립니다.

답변

1

beginUpdate을 두 개의 컨텍스트를 병합하기 전에 tableview에 보내지 않아서 tableview에서 논리 테이블을 그 중간 상태로 표시하려고합니다. 알림 수신시 테이블 뷰를 고정시킨 다음 컨텍스트가 병합되었을 때 테이블 뷰의 고정을 해제합니다.

+0

생명의 은인! 감사. 그것은 트릭을했다. 나는 당신이 tableView를 '동결'시킬 수 있다는 것을 깨닫지 못했지만 매력적입니다! – Hooligancat

관련 문제