2010-08-03 26 views
7

Tôi đã thử điều này trong hai ngày và liên tục chạy vào các ngõ cụt.Populating NSTableview từ một mảng có thể thay đổi

Tôi đã trải qua Lập trình ca cao Aaron Hillegass cho MAC OS X và thực hiện tất cả các bài tập liên quan về NSTableview và mảng có thể thay đổi, và tôi đã cố gắng sửa đổi chúng cho phù hợp với nhu cầu của tôi.

Tuy nhiên không ai trong số họ dường như đang sử dụng một mảng với các đối tượng dưới dạng nguồn dữ liệu, có vẻ như sử dụng tableview làm nguồn dữ liệu.

Tôi đang cố gắng triển khai "làm lại" của mã số here của Jonas Jongejan, với giao diện người dùng Cocoa để hiển thị kết quả.

Bất kỳ gợi ý hay gợi ý nào tôi biết điều này sẽ đơn giản, nhưng tôi bị lạc trong vùng hoang dã ở đây.

tôi có thể cư bảng bằng cách thiết lập các mảng

Trả lời

14

Nó khá đơn giản thực sự, một khi bạn nhận được để hiểu nó (tất nhiên!). Bạn không thể sử dụng NSArray trực tiếp như một nguồn bảng. Bạn cần tạo một đối tượng tùy chỉnh triển khai thực hiện NSTableViewDataSource hoặc triển khai giao thức đó trong một số lớp hiện có - thường là bộ điều khiển. Nếu bạn sử dụng Xcode để tạo một ứng dụng dựa trên tài liệu chuẩn, lớp trình điều khiển tài liệu - (nó sẽ được gọi là MyDocument) là một lớp tốt để sử dụng.

Bạn cần phải thực hiện hai phương pháp tối thiểu sau đây:

– numberOfRowsInTableView: 
– tableView:objectValueForTableColumn:row: 

Nếu bạn có một mảng có thể thay đổi mà giá trị mà bạn muốn sử dụng trong một cái nhìn bảng với một cột, giống như sau nên làm như một sự khởi đầu:

– numberOfRowsInTableView: (NSTableView*) aTableView 
{ 
    return [myMutableArray count]; 
} 

– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex 
{ 
    return [myMutableArray objectAtIndex: rowIndex]; 
} 

Nó vừa mới xảy ra với tôi rằng bạn có thể thêm hai phương pháp trên như một phạm trù để thay thế NSArray myMutableArray với self và sau đó bạn có thể sử dụng một mảng như một nguồn dữ liệu.


Dù sao, với một mảng có thể thay đổi, điều quan trọng là bất cứ lúc nào bạn thay đổi nó, bạn cần phải để cho xem bảng biết nó đã được thay đổi, vì vậy bạn cần gửi xem bảng -reloadData.


Nếu chế độ xem bảng của bạn có nhiều cột và bạn muốn điền nó với thuộc tính của đối tượng trong mảng, bạn có thể thực hiện một mẹo để tự mình làm dễ dàng hơn.Hãy nói rằng các đối tượng trong mảng của bạn là trường hợp của một lớp được gọi là Người có hai phương pháp định nghĩa:

-(NSString*) givenName; 
-(NSString*) familyName; 

và bạn muốn xem bảng của bạn để có một cột cho mỗi người, bạn có thể thiết lập các identifier tài sản của mỗi cột đến tên của bất động sản trong Person rằng hiển thị cột và sử dụng giống như sau:

– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex 
{ 
    Person* item = [myMutableArray objectAtIndex: rowIndex]; 
    return [item valueForKey: [tableColumn identifier]]; 
} 

Nếu bạn thay thế valueForKey: với valueForKeyPath: và lớp Person của bạn cũng có các phương pháp sau:

-(Person*) mother; 
-(Person*) father; 
-(NSString*) fullName; // concatenation of given name and family name 

bạn có thể thêm cột bảng có số nhận dạng như: father.fullName hoặc mother.familyName và các giá trị sẽ được tự động điền.

1

Apple có một hướng dẫn toàn bộ cho bảng Xem trình vì vậy tôi đề nghị bạn bắt đầu với phần Using a Table Data Source của hướng dẫn đó.

+1

liên kết này không hoạt động !! hãy cập nhật nó! – elin3t

1

Trên iPhone (Tôi biết bạn đang nói về Mac, nhưng có lẽ điều này có thể hữu ích) bạn phải sử dụng ủy quyền để tải một tableView. Nó yêu cầu một ô và bạn sử dụng mảng của mình để điền vào dữ liệu khi cần. Tôi không chắc chắn nếu điều này làm việc cho Mac, nhưng nó sẽ được giá trị xem xét.

Có lẽ thiết lập nguồn dữ liệu để tự và sử dụng những phương pháp đại biểu để truy cập mảng của bạn dựa trên các hàng và cột #

+0

@ Câu trả lời của willcodejavaforfood là dành cho iPhone nhưng bạn có thể theo liên kết đó để xem ý tôi là gì – RSully

+0

Rất tiếc, tôi đã nhận được iPhone trên bộ não của mình :) – willcodejavaforfood

3

Bạn có thể đi tuyến đường nguồn dữ liệu và tự mình thực hiện tất cả các công việc nặng nhọc, hoặc bạn có thể để các ràng buộc làm tất cả việc nâng hạng nặng cho bạn. Thêm NSArrayController vào tệp nib có chế độ xem bảng trong đó. Đảm bảo rằng Chủ sở hữu tệp của ngòi được đặt thành cùng một lớp có mảng có thể thay đổi trong đó. Liên kết contentArray của bộ điều khiển mảng với File's Owner.myMutableArray. Đối với mỗi cột, hãy liên kết Value với bộ điều khiển mảng arrangedObjects và thêm đường dẫn khóa thích hợp. Điều này sẽ cho phép bạn có được những thứ như người dùng sắp xếp miễn phí nếu bạn cần nó.

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