2012-06-04 23 views
8

Tôi có một câu hỏi tương tự như Cocoa - View-Based NSTableView, using one cell in multiple tables, khuếch đại bởi Apple's own docs cho makeViewWithIdentifier:owner:NSTableView makeViewWithIdentifier qua ngòi

"Điển hình nhận dạng được kết hợp với một NIB bên ngoài trong Interface Builder và xem bảng sẽ tự động nhanh chóng các NIB với chủ sở hữu được cung cấp. "

Điều này dường như ngụ ý rằng bạn sẽ có thể lưu trữ NSTableCellView trong một ngòi bút riêng biệt từ ngòi chứa NSTableView. Tuy nhiên, trong thử nghiệm của tôi, tôi đã chỉ có thể có được các tế bào được chứa trong tableview Tôi đang gọi này trên. Tức là, nếu tôi cắt và dán ô của tôi vào một tệp .xib mới, bảng nhìn không còn có thể tìm thấy nó nữa. Tôi đang làm gì sai, hoặc là điều này thực sự không thể và tôi bằng cách nào đó misreading tài liệu của Apple?

Trả lời

3

Tôi vừa gặp vấn đề này và tôi nghĩ bạn không thể sử dụng makeViewWithIdentifier: chủ sở hữu: khi bạn đang sử dụng Nib chuyên dụng để điền vào Bảng xem.

Sự cố phải làm với chủ sở hữu tệp (ví dụ: bộ điều khiển chế độ xem). makeViewWithIdentifier: chủ sở hữu: dường như có ý định được sử dụng với "tự" làm chủ sở hữu cho chế độ xem tùy chỉnh đơn giản.

Nói chung nếu bạn có một ngòi bút riêng cho chế độ xem tùy chỉnh với các cửa hàng, bạn cũng sẽ muốn có một bộ điều khiển chế độ xem riêng biệt. Nếu không, nếu chế độ xem tùy chỉnh của bạn có một lối thoát và bảng hiển thị nhiều chế độ xem tùy chỉnh, bạn sẽ đề cập đến lối thoát nào từ chủ sở hữu chế độ xem bảng "tự"?

Vì vậy, trong thử nghiệm của mình, tôi đã có AppDelegate làm đại biểu/nguồn dữ liệu của Chế độ xem bảng. Tôi có CellView.xibCellViewController.h/.m với các cửa hàng ra giao diện. Sau đó, trong tableView của tôi: viewForTableColumn: row: phương pháp đại biểu tôi có mã này:

SSCellViewController *vc = [[SSCellViewController alloc] initWithNibName:@"CellView" bundle:nil]; 
return vc.view; 

gì bạn bị mất là các tế bào tái sử dụng điều đó xảy ra tự động với makeViewWithIdentifier: chủ sở hữu :. Để thực hiện điều đó, bạn cũng sẽ phải đối phó với việc quản lý nhiều bộ điều khiển chế độ xem mà bạn đã tạo.

Tôi có thể vẫn còn thiếu điều gì đó, vì tôi đang đến với sự phát triển OS X sau nhiều năm chỉ làm công việc iOS.

+2

Bạn khởi tạo trình điều khiển chế độ xem nhưng chỉ trả lại chế độ xem của nó. Ai sở hữu bộ điều khiển xem? Không phải nó sẽ tự động được phân phối theo ARC? Nó có bị rò rỉ không? –

5

Sử dụng - (void)registerNib:(NSNib *)nib forIdentifier:(NSString *)identifier để đăng ký ngòi bút được sử dụng với số nhận dạng ô.

Nếu không hoạt động, có thể bạn đang đăng ký ngòi bút sau khi dữ liệu tableView đã được tải. Sử dụng các từ sau [tableView reloadData] để chắc chắn đó không phải là vấn đề về thời gian.

+1

Hm ... trông giống như một phương pháp mới trong 10.8. Các nhà phát triển có đang nhắm mục tiêu đến 10,7 trong số may mắn không? –

+1

Trên 10.7 bạn sẽ có thể xây dựng NSTableCellView như các đối tượng cấp cao nhất trong cùng một nib như NSTableView của bạn. Xem ra, mặc dù. Thông qua thử nghiệm của tôi nó xuất hiện nib được instantiated mỗi khi một tế bào được tạo ra từ nó. Nói cách khác, nếu bạn có một vài đối tượng khác trong ngòi của bạn, tất cả chúng cũng sẽ được khởi tạo. –

+0

Đã một thời gian kể từ khi tôi đặt ra câu hỏi, nhưng IIRC gặp khó khăn khi lấy NSTableCellView từ một ngòi ngách ngoài. –

Các vấn đề liên quan