2010-03-30 5 views
0

HTTP를 통해 원격 서버에서 반환하는 대용량 데이터 집합 (약 3500 개 개체)이 있습니다. 현재 데이터는 NSCollectionView에 표시됩니다. 데이터의 한 측면은 데이터를 나타내는 작은 이미지 용 서버로의 경로 팩입니다 (단순화를 위해 축소판으로 생각하십시오).큰 배열에서 Valueurl 바인딩이 느린 사용자 인터페이스를 야기 함

Bindings는 이미 반환 된 데이터에 대해 훌륭하게 작동하며 valueurl 바인딩을 통해 이미지를 바인딩하는 것은 쉽습니다. 그러나 데이터 세트를 스크롤 할 때 사용자 인터페이스가 매우 느려서 현재 볼 수있는 이미지를 표시하는 데 사용 된 이미지 데이터 대신에 NSCollectionView이 모든 이미지 데이터를 검색하고 있다고 생각하게 만듭니다.

나는 코코아 컨트롤이 게으른 로딩을 통해 실제로 사용자 인터페이스로 출력되는 정보에 대한 데이터 만 검색 할만큼 똑똑하다는 인상을 받았다. 이것은 확실히 NSTableView의 경우 인 것 같습니다. 그러나 나는이 생각에 잘못 이해할 수 있습니다.

값어치 바인딩은 느리게 동작해야하며, NSCollectionView에서 느리게 동작해야합니까?

캐싱 메커니즘을 만들 수 있습니다. (실제로 이미 다른 응용 프로그램과 같은 위치에 있습니다. 관심이 있다면 여기 내 게시물을 참조하십시오. Populating NSImage with data from an asynchronous NSURLConnection)하지만이 경로를 사용하고 싶지는 않습니다. 사용자가 잠재적으로 데이터 세트를 변경하고 데이터의 작은 하위 집합 만 원할 수 있으므로이 특정 구현에 필요합니다.

제안 된 접근 방법은 무엇입니까?

감사합니다.

업데이트 후 좀 더가 데이터 세트를 통해 스크롤 액션은 각각의 이미지가 서버에서 요청되도록하기 때문에 문제가 발생하는 것 같다 테스트. 모든 이미지가 데이터 세트에 전달되면 응답이 매우 빠릅니다.

그래서 질문이 있습니다 ... 스크롤하는 동안 값을 가져 오기를 끄고 스크롤을 끝낼 때 다시 켜는 방법이 있습니까?

답변

0

내 솔루션은 이미 다른 응용 프로그램에서 사용하는 것과 같은 사용자 지정 캐싱 메커니즘을 사용하는 것입니다. 아직 다운로드되지 않은 과거 이미지를 스크롤 할 때 컨트롤이 스스로 다운로드하여 다운로드되지 않은 파일을 가져 오도록 가져 오기 때문에 문제가 발생합니다.

이미지를 다운로드하면 로컬에서 사용할 수 있으므로 스크롤 속도가 정상화됩니다. 해결책은 이미지가 로컬에서 사용 가능한지 확인하고 이미지가 백그라운드에서 다운로드되는 동안 대체 앱 번들 그래픽을 제공하는 것입니다. 이미지가 다운로드되면 번들에서 제공된 스텁 이미지를 대체하는 이미지로 모델을 업데이트하십시오.

이렇게하면 전체적으로 UI가 매우 반응적인 상태로 유지되고 사용자는 상호 작용할 수 있고 이미지의 사용자 지정 배경 관리가 가능합니다.

물론 코코아가이 모든 것을 내게 주면 좋겠지 만, 어떻게해야 할 것 같습니까? :-)

관련 문제