Tôi đang gặp sự cố khi tìm hiểu cách thể hiện mô hình mối quan hệ nhiều-nhiều trong một NSTokenField. Tôi có hai mô hình (có liên quan):NSTokenField đại diện cho dữ liệu cốt lõi cho nhiều mối quan hệ
mục Tag
Một mặt hàng có thể có nhiều thẻ và một thẻ có thể có nhiều mặt hàng. Vì vậy, nó là một mối quan hệ nghịch đảo nhiều.
Điều tôi muốn làm là đại diện cho các thẻ này trong NSTokenField. Tôi muốn kết thúc với một tokenfield tự động đề xuất các trận đấu (phát hiện ra một cách để làm điều đó với tokenfield: completionsForSubstring: indexOfToken: indexOfSelectedItem) và có thể thêm các thực thể thẻ mới nếu nó không phù hợp với hiện tại.
Được rồi, hy vọng bạn vẫn ở bên tôi. Tôi đang cố gắng làm tất cả điều này với các ràng buộc và bộ điều khiển mảng (vì điều đó có ý nghĩa nhất, phải không?)
Tôi có một bộ điều khiển mảng, "Item Array Controller", đó là ràng buộc với đại biểu ứng dụng managedObjectContext của tôi. Một tableview hiển thị tất cả các mục có một ràng buộc để điều khiển mảng này.
Giá trị NSTokenField của tôi có ràng buộc với khóa lựa chọn bộ điều khiển mảng và đường dẫn khóa mô hình: thẻ.
Với cấu hình này, NSTokenField sẽ không hiển thị các thẻ. Nó chỉ mang lại cho tôi:
<NSTokenFieldCell: 0x10014dc60>: Unknown object type assigned (Relationship objects for {(
<NSManagedObject: 0x10059bdc0> (entity: Tag; id: 0x10016d6e0 <x-coredata://9D77D47A-1171-4397-9777-706F599D7E3B/Tag/p102> ; data: <fault>)
)} on 0x100169660). Ignoring...
Điều này có ý nghĩa với tôi, vì vậy đừng lo lắng. Tôi đã xem xét một số phương pháp đại biểu NSTokenField và có vẻ như tôi nên sử dụng:
- (NSString *)tokenField:(NSTokenField *)tokenField displayStringForRepresentedObject:(id)representedObject
Vấn đề là, phương pháp này không được gọi và tôi gặp lỗi tương tự như trước đây.
Được rồi, vì vậy động thái tiếp theo của tôi là thử và tạo một ValueTransformer. Chuyển đổi từ một mảng với thực thể thẻ -> mảng có chuỗi (tên thẻ) đều tốt. Cách khác là khó khăn hơn.
Những gì tôi đã cố gắng là tra cứu mọi tên trong ứng dụng được chia sẻ của tôi ủy quyền bối cảnh đối tượng được quản lý và trả về các thẻ phù hợp. Điều này mang lại cho tôi một vấn đề với các bối cảnh đối tượng được quản lý khác nhau rõ ràng:
Illegal attempt to establish a relationship 'tags' between objects in different contexts (source = <NSManagedObject: 0x100156900> (entity: Item; id: 0x1003b22b0 <x-coredata://9D77D47A-1171-4397-9777-706F599D7E3B/Item/p106> ; data: {
author = "0x1003b1b30 <x-coredata://9D77D47A-1171-4397-9777-706F599D7E3B/Author/p103>";
createdAt = nil;
filePath = nil;
tags = (
);
title = "Great presentation";
type = "0x1003b1150 <x-coredata://9D77D47A-1171-4397-9777-706F599D7E3B/Type/p104>";
}) , destination = <NSManagedObject: 0x114d08100> (entity: Tag; id: 0x100146b40 <x-coredata://9D77D47A-1171-4397-9777-706F599D7E3B/Tag/p102> ; data: <fault>))
Tôi sẽ làm gì sai? Làm cách nào để giải quyết vấn đề này? Có phải đó là cách tiếp cận đúng (có vẻ lạ với tôi rằng bạn phải sử dụng một ValueTransformer?)
Cảm ơn bạn trước!
Tôi đã dành nhiều thời gian nghiên cứu hơn cho hôm nay - vẫn không thể tìm thấy tài nguyên giải thích điều này. Tôi hy vọng ai đó sẽ đến giải cứu ở đây! :) – simonwh