7

Tôi đang cố gắng thiết lập một NSCollectionView (Tôi đã thực hiện điều này thành công trong quá khứ, nhưng vì một số lý do không thành công trong lần này).NSCollectionView rút ra không có gì

Tôi có một lớp mô hình được gọi là "TestModel" và có thuộc tính NSString chỉ trả về một chuỗi (chỉ dành cho mục đích thử nghiệm ngay bây giờ). Sau đó tôi có một tuyên bố tài sản NSMutableArray trong lớp đại biểu ứng dụng chính của tôi, và mảng này tôi thêm trường hợp của đối tượng TestModel.

Tôi sau đó có Bộ điều khiển Mảng có Mảng nội dung của nó đã ràng buộc ứng dụng của đại biểu là NSMutableArray. Tôi có thể xác nhận rằng mọi thứ ở đây đều hoạt động tốt; NSLogging:

[[[arrayController arrangedObjects] objectAtIndex:0] teststring] 

hoạt động tốt.

Sau đó tôi có tất cả các liên kết thích hợp cho thiết lập chế độ xem bộ sưu tập, (itemPrototype và nội dung) và cho mục Xem bộ sưu tập (chế độ xem). Sau đó, tôi có trường văn bản trong chế độ xem mục bộ sưu tập được gắn với Bộ sưu tập Xem Item.representedObject.teststring. Tuy nhiên NOTHING hiển thị trong giao diện bộ sưu tập khi tôi khởi động ứng dụng, chỉ một màn hình trắng trống. Tôi đang thiếu gì?

UPDATE: Đây là mã tôi sử dụng (theo yêu cầu của shipley wil):

// App delegate class 

@interface AppController : NSObject { 

NSMutableArray *objectArray; 
} 
@property (readwrite, retain) NSMutableArray *objectArray; 
@end 

@implementation AppController 
@synthesize objectArray; 

- (id)init 
{ 
    if (self = [super init]) { 
    objectArray = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    TestModel *test = [[[TestModel alloc] initWithString:@"somerandomstring"] autorelease]; 
    if (test) [objectArray addObject:test]; 
} 
@end 

// The model class (TestModel) 

@interface TestModel : NSObject { 
NSString *teststring; 
} 
@property (readwrite, retain) NSString *teststring; 
- (id)initWithString:(NSString*)customString; 
@end 

@implementation TestModel 
@synthesize teststring; 

- (id)initWithString:(NSString*)customString 
{ 
    [self setTeststring:customString]; 
} 

- (void)dealloc 
{ 
    [teststring release]; 
} 
@end 

Và rồi như tôi đã nói các mảng nội dung của điều khiển Mảng là ràng buộc để này "objectArray", và Nội dung của NSCollectionView được liên kết với Array Controller.arrangedObjects. Tôi có thể xác minh rằng Bộ điều khiển Mảng có các đối tượng trong đó bởi NSLogging [arrayController arrangementObjects], và nó trả về đối tượng đúng. Nó chỉ là không có gì hiển thị trong NSCollectionView.

UPDATE 2: Nếu tôi đăng nhập [collectionView nội dung] Tôi nhận được gì:

2009-10-21 08:02:42.385 CollViewTest[743:a0f] (
) 

Vấn đề có lẽ là ở đó.

UPDATE 3: Theo yêu cầu ở đây là dự án Xcode:

http://www.mediafire.com/?mjgdzgjjfzw

của một ứng dụng thanh menu, vì vậy nó không có cửa sổ. Khi bạn xây dựng và chạy ứng dụng, bạn sẽ thấy một mục thanh menu có nội dung "test", nó sẽ mở ra khung nhìn chứa NSCollectionView.

Cảm ơn

+0

Làm thế nào để bạn chỉnh sửa các mảng có thể thay đổi trong các đại biểu? Bạn có thể gửi mã không? –

+0

Tôi đã chỉnh sửa bài đăng và thêm mã tôi sử dụng – indragie

+0

Mã bạn đã đăng không cho chúng tôi biết bất kỳ điều gì về việc các kết buộc của bạn có được kết nối đúng cách hay không. Bạn sẽ cần phải đăng dự án ở đâu đó. – NSResponder

Trả lời

4

Vấn đề là bạn không sử dụng đúng KVC. Có hai điều bạn có thể làm.

Phương pháp 1: Đơn giản nhưng không phải như vậy tao nhã

  1. Sử dụng đoạn mã sau để thêm đối tượng vào mảng

[[tự mutableArrayValueForKey: @ "objectArray"] AddObject: test];

Điều này không quá thanh lịch vì bạn phải chỉ định biến bằng giá trị chuỗi, vì vậy bạn sẽ không nhận được cảnh báo trình biên dịch khi viết sai chính tả.

Phương pháp 2: Tạo phương thức KVO cần thiết cho mảng "objectArray".

  1. Chọn bất động sản trong tuyên bố giao diện của bạn
  2. Chọn Scripts (biểu tượng kịch bản trong thanh menu)> Mã> Đặt decls accessor trên Clipboard
  3. Dán tờ khai ở vị trí thích hợp trong file giao diện của bạn
  4. Chọn Tập lệnh> Mã> Đặt lỗi truy cập trên Clipboard
  5. Dán các định nghĩa vào vị trí phù hợp trong tệp triển khai của bạn

Sau đó bạn có thể sử dụng một phương pháp mà trông giống như

[self insertObject:test inObjectArrayAtIndex:0]; 
+1

Nếu bạn lo lắng về việc truyền các giá trị chuỗi (như bạn nên), bạn có thể tạo một NSString tĩnh trong lớp của bạn: 'static NSString * objectArrayKey = @" objectArray ";' và sau đó bạn có thể gọi '[[self mutableArrayValueForKey: objectArrayKey] addObject: test];' cung cấp cho bạn tất cả các hỗ trợ trình biên dịch và tự động hoàn thành. – Abizern

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