2009-09-07 7 views
0

제 설정에서 Mac에 연결된 볼륨의 NSCollectionView가 있습니다. NSCollectionViewItem의 뷰에는 해당 볼륨의 내용을 나열하는 NSTableView가있는 NSBox가 있습니다.NSCollectionViewItem의 인스턴스에서 NSTableView 업데이트

NSTableView에 항목을 추가/제거하려고 할 때 문제가 발생합니다. NSBox는 한 번 초기화 된 것으로 보이므로 NSTableView가 하나뿐입니다. 즉, NSTableView 내부의 데이터를 업데이트하려고 할 때 IBOutlet에서 reloadData를 호출하여 모든 테이블을 업데이트 할 수 없음을 의미합니다.

NSBox의 하위 클래스에 IBOutlet을 만들면 인스턴스에 대해 nil이므로 인스턴스를 통해 호출 할 수 없습니다.

가장 가까운 곳은 열의 행에있는 객체를 반환하는 코드 주위에 @try @catch를 묶는 것입니다. 해당 항목이 더 이상 존재하지 않으므로 예외가 발생하므로 tableView를 가져 와서 reloadData 그 특정 NSTableView 업데이트 할 것으로 보인다.

제거 된 항목이 테이블 끝에 있거나 항목이 추가되면 모든 기존 항목을 볼 수 있으므로 예외가 발생하지 않습니다.

누구나 NSCollectionViewItem의보기에서 NSTableView에 대한 경험이 있습니까? 어떻게 테이블을 업데이트 했습니까?

+0

[NSCollectionView에 대한 블로그 게시물] (http://benedictcohen.co.uk/files/5b81e3c40cee2daf88ceffe6eb556a63-3.php)을 작성하면 도움이 될 것입니다. –

+0

가이드를 가져 주셔서 감사합니다. 당신이 작성한 이후로 상황이 많이 바뀌 었는지는 확실치 않지만, -LoadFromNib가 존재하지 않고 대신 -loadNibNamed를 사용하는 것으로 나타났습니다. – Septih

답변

1

NSTableView와 함께 NSBox를 고유 한 펜촉에 둡니다. 새 컬렉션 뷰 항목을 만들 때마다 펜촉을로드하고 해당 NSBox를 컬렉션보기 항목의보기로 설정 한 다음 NSBox를 놓습니다.

표보기를 제공하는 가장 쉬운 방법은 아마도 Bindings입니다. 테이블 뷰의 각 열을 컬렉션 뷰 항목이 나타내는 모델 객체의 다른 속성에 바인딩합니다. 물론 배열 컨트롤러를 사용하고 싶을 것입니다. 이는 콜렉션 뷰 항목 당 하나의 배열 항목을 가지고 배열에 추가하는 것을 의미합니다.이 배열은 dealloc에 릴리스됩니다.

+0

나는이 일에 가담했지만 두 가지 문제에 직면 해있다. 첫째, 표현 된 객체를 바인딩해야했던 코드는 더 이상 새로운 서브 클래 싱 된 CollectionViewItem에 바인드 한 IBOutlet이 아무것도 반환하지 않으므로 작동하지 않습니다. 두 번째로, NSBox가 눌려져 NSCollectionView 내부에 모두 들어갈 수 있습니다. 반면에 두 개의 열에 퍼지기 전에 항목이 충분하면 스쿼시 대신 스크롤됩니다. – Septih

+0

업데이트 : 이제 문제가 해결되었습니다. 하위 클래스 화 덕분에 minItemSize 및 maxItemSize. – Septih

+0

OK 콘센트가 돌아 오지 않는 이유는 내가 새 펜촉으로 끌고 가서 (duh!) 연결되어 있지 않은 이전보기 때문이었고 오류가 발생했습니다. 모두 지금 정렬 됨 :) – Septih