Cho các đối tượng mô hình mà NSTreeController
thể hiện, làm thế nào để bạn tìm thấy đường dẫn chỉ mục của chúng trong cây và sau đó chọn chúng? Điều này có vẻ là một vấn đề rõ ràng, nhưng tôi dường như không tìm thấy bất kỳ tham chiếu nào về nó. Ý tưởng nào?Cho đối tượng mô hình, làm thế nào để tìm đường dẫn chỉ mục trong NSTreeController?
Trả lời
Không có cách nào "dễ dàng", bạn phải đi bộ các nút cây và tìm thấy một con đường chỉ số phù hợp, cái gì đó như:
Objective-C:
Thể loại
@implementation NSTreeController (Additions)
- (NSIndexPath*)indexPathOfObject:(id)anObject
{
return [self indexPathOfObject:anObject inNodes:[[self arrangedObjects] childNodes]];
}
- (NSIndexPath*)indexPathOfObject:(id)anObject inNodes:(NSArray*)nodes
{
for(NSTreeNode* node in nodes)
{
if([[node representedObject] isEqual:anObject])
return [node indexPath];
if([[node childNodes] count])
{
NSIndexPath* path = [self indexPathOfObject:anObject inNodes:[node childNodes]];
if(path)
return path;
}
}
return nil;
}
@end
Swift:
mở rộng
extension NSTreeController {
func indexPathOfObject(anObject:NSObject) -> NSIndexPath? {
return self.indexPathOfObject(anObject, nodes: self.arrangedObjects.childNodes)
}
func indexPathOfObject(anObject:NSObject, nodes:[NSTreeNode]!) -> NSIndexPath? {
for node in nodes {
if (anObject == node.representedObject as! NSObject) {
return node.indexPath
}
if (node.childNodes != nil) {
if let path:NSIndexPath = self.indexPathOfObject(anObject, nodes: node.childNodes)
{
return path
}
}
}
return nil
}
}
Tại sao không sử dụng NSOutlineView để có được những mặt hàng mẹ như thế này:
NSMutableArray *selectedItemArray = [[NSMutableArray alloc] init];
[selectedItemArray addObject:[self.OutlineView itemAtRow:[self.OutlineView selectedRow]]];
while ([self.OutlineView parentForItem:[selectedItemArray lastObject]]) {
[selectedItemArray addObject:[self.OutlineView parentForItem:[selectedItemArray lastObject]]];
}
NSString *selectedPath = @".";
while ([selectedItemArray count] > 0) {
OBJECTtype *singleItem = [selectedItemArray lastObject];
selectedPath = [selectedPath stringByAppendingString:[NSString stringWithFormat:@"/%@", singleItem.name]];
selectedItemArray removeLastObject];
}
NSLog(@"Final Path: %@", selectedPath);
chí này ra: ./item1/item2/item3/...
Tôi giả sử bạn đang tìm kiếm một đường dẫn tệp ở đây nhưng bạn có thể điều chỉnh cho bất kỳ nguồn dữ liệu nào của bạn có thể đại diện.
Câu hỏi đang tìm kiếm một NSIndexPath cho bất kỳ đối tượng nhất định trong cây, để bạn có thể thay đổi selectedIndexPath (s) của bộ điều khiển cây thành một chương trình đó. Bạn đang giả định rằng đối tượng đã được chọn. Nếu vậy, bạn chỉ cần lấy selectionIndexPath từ bộ điều khiển cây! – stevesliva
- 1. Làm thế nào để mở rộng vùng thử nghiệm hit WPF cho đối tượng Đường dẫn
- 2. Tìm chỉ mục trong mảng đối tượng
- 3. Chỉ định đường dẫn tìm kiếm cho DllImport trong .NET
- 4. làm thế nào để thiết lập mặc định 'chọn' ng-mô hình cho một đối tượng?
- 5. làm thế nào để tải hình ảnh với đường dẫn tương đối trong bitmap
- 6. Nhận chỉ mục của đối tượng trong mảng để tìm kiếm đối tượng tương ứng trong mảng khác
- 7. Tùy chỉnh trang chỉ mục quản trị Django để hiển thị các đối tượng mô hình
- 8. Làm thế nào để cho phép cscope sử dụng đường dẫn tuyệt đối trong tệp cscope.out?
- 9. Làm cách nào để tìm đường dẫn tuyệt đối cho ứng dụng khung chơi?
- 10. Làm cách nào để tìm chỉ mục của một mảng có đối tượng trong Rails?
- 11. biến Đường dẫn Bind đến một đối tượng mô hình tùy chỉnh vào mùa xuân
- 12. Làm thế nào để làm một hình thức phi mô hình trong ruby trên đường ray?
- 13. Làm thế nào để gửi đối tượng mô hình trong Html.RenderAction (MVC3)
- 14. Trong một makefile, làm thế nào để có được đường dẫn tương đối từ một đường dẫn tuyệt đối khác?
- 15. Làm thế nào để mô hình dựng hình đối tượng trò chơi và hành vi theo cách mô-đun?
- 16. Làm thế nào để chuyển đổi đường dẫn tương đối thành đường dẫn tuyệt đối trong ứng dụng Windows?
- 17. Mô hình Django - chỉ định id thay vì đối tượng
- 18. RedBean ORM và Codeigniter, làm thế nào để làm cho Fuse nhận ra các mô hình được tải từ đường dẫn mô hình mặc định CI?
- 19. làm thế nào để tìm thấy đầy đủ (đường dẫn tuyệt đối) các tập tin mục tiêu của liên kết tượng trưng hoặc liên kết mềm trong python
- 20. Làm thế nào để có được/thiết lập đường dẫn thư mục hợp lý trong python
- 21. Đường dẫn tương đối với mô-đun/gói RequireJS
- 22. tìm đường dẫn cho .exe
- 23. làm thế nào để thêm đường dẫn với mô-đun để python?
- 24. Tìm đường dẫn cho trò chơi
- 25. Matplotlib thư mục làm việc latex/đường dẫn tìm kiếm
- 26. Làm thế nào để có đường dẫn tuyệt đối cho bảng định kiểu trong thư với đường ống nội dung?
- 27. Cho biết một kịch bản cấu hình để sử dụng đường dẫn tương đối cho --datarootdir
- 28. Đường ray: Giới thiệu trở lại để mô hình đối tượng thuộc về
- 29. Làm cách nào để sử dụng đường dẫn tương đối trong mô-đun Python khi CWD đã thay đổi?
- 30. Đường dẫn tương đối trong trang chính cho thẻ img
Ouch, điều đó thực sự không hiệu quả. Tôi đang nghĩ đến việc viết một phân lớp của treecontroller giữ một ánh xạ giữa mô hình và treenodes. Hoặc có thể là một danh mục trên mô hình giữ tham chiếu đến treenode liên quan. – Tony
Tất cả những gì bạn cần làm trong lớp con của bạn là duy trì một 'NSMutableArray' phẳng của các nút cây. Bạn cần phải cẩn thận rằng tất cả các sửa đổi của các nút được phản ánh trong mảng của bạn, tất nhiên. –
Hmm, tôi đã nghĩ đến một ánh xạ 'NSMutableDictionary' hoặc đối tượng mô hình hoặc objectID thành' NSTreeNode's, vì nó có vẻ hiệu quả hơn khi tra cứu. Có bất kỳ lý do 'NSmutableArray' có thể làm việc betteR? – Tony