2012-08-28 36 views
7

Tôi không thể tìm ra những gì @UnionOfObjects cung cấp một giá trị đơn giảnForKey: hoặc valueForKeyPath: không thể thực hiện.Mã hóa khóa-giá trị @UnionOfObjects

Apple docs:

Nhà điều hành @unionOfObjects trả về một mảng chứa các đối tượng riêng biệt trong các tài sản theo quy định của con đường phím ở bên phải của toán tử . Không giống như “@distinctUnionOfObjects”, các đối tượng trùng lặp không bị xóa . Ví dụ sau sẽ trả về giá trị tài sản người thụ hưởng về các giao dịch trong các giao dịch:

NSArray *payees = [transactions valueForKeyPath:@"@unionOfObjects.payee"]; 

Kết quả là người thụ hưởng mảng chứa các chuỗi kí tự sau: Xanh Power, Green Power, Green Power, Loan xe, Loan xe, Loan xe, Tổng quát Cáp, Cáp tổng hợp, Cáp tổng hợp, Thế chấp, Thế chấp, Thế chấp, Bệnh viện động vật.

Trong ví dụ trên,

NSArray *payees = [transactions valueForKey:@"payee"]; 

sẽ trở lại cùng một mảng các giá trị, nhưng với mã ít hơn. Tôi đang thiếu gì?

+1

Các tính năng này của KVO cung cấp nhiều giá trị khi bạn sử dụng các ràng buộc trên OSX. –

Trả lời

3

Tất cả những gì tôi có thể nghĩ ngay lập tức là "trả về một mảng chứa ..." (nhấn mạnh mỏ). Vì vậy, nó sẽ thuận tiện cho việc:

NSSet *someSet = ...; 

NSArray *result = [someSet valueForKey:@"@unionOfObjects.whatever"]; 

Đó là do đó hữu ích bất cứ nơi nào trong bindings Cocoa nơi bạn muốn một NSSet (hoặc các bộ sưu tập không cho mảng) để đẩy dữ liệu vào một lỗ hình NSArray.

+0

Cảnh báo cho người đọc trong tương lai: khi tôi thử điều này, tôi nhận được: ''NSInvalidArgumentException', lý do: '[<__ NSSetI 0x7ff069d02140> valueForKeyPath:]: lớp này không thực hiện thao tác unionOfObjects.' (trong một sân chơi), vì vậy nó có thể không an toàn khi sử dụng '@ unionOfObjects' trên một NSSet. –