2015-08-21 14 views

Trả lời

1

Thật không may CoreData nhanh chóng vẫn là một nỗi đau lớn đặc biệt là với mối quan hệ một-nhiều thứ tự. Có, nó vẫn là NSOrderedSet đang được sử dụng bởi CoreData cho nhiều mối quan hệ. Câu hỏi đặt ra là cách thêm/xóa các mục này. Xcode chưa bao giờ có thể tạo ra accessors đúng cho các bộ được đặt hàng cho đến nay - ngay cả trong Objective cho phép một mình Swift !!

Có chủ đề này tiết kiệm tới nhiều mối quan hệ trong Swift: How to define CoreData relationship in Swift?

Nhưng, than ôi !, gì đề cập trong chủ đề này từng làm việc trong thế giới Swift 2.0. Vì vậy, cách giải quyết hiện tại là gì? Tôi đào sâu vào điều này, và cách duy nhất để làm việc này là tạo ra các nguồn cho các thực thể được đề cập, trong Mục tiêu C, và không nhanh chóng và xuất các tiêu đề của chúng trong tiêu đề bắc cầu. Ngoài ra, bạn cần phải chắc chắn rằng bạn bao gồm sửa chữa workaround quan trọng đối với Xcode để tạo accessors thích hợp cho bộ ra lệnh:

https://github.com/CFKevinRef/KCOrderedAccessorFix

Bạn nên đảm bảo để call- model.kc_generateOrderedSetAccessors() trong mã tạo mô hình của bạn trong appdelegate để gọi sửa lỗi này.

Sau khi hoàn tất, bây giờ bạn có thể bắt đầu một cách an toàn bằng cách sử dụng trình truy cập được tạo trên mô hình của bạn để thêm các mục vào mối quan hệ nhiều.

tôi đã tạo ra một dự án mẫu và đang trong github và hy vọng nó helps-

https://github.com/shripada/CoreDataToManyRelationshipInSwift2.0

+1

Hóa ra nó trở nên đơn giản hơn trong XCode 7 beta 5. Core Data giờ đây sử dụng NSSet cho các mối quan hệ một-nhiều. Tạo một NSMutableSet như "let clientSet: NSMutableSet = []" sau đó thêm một đối tượng Core Data vào tập "clientsSet.addobject (aClientObject)" và sau đó đặt tập hợp vào mối quan hệ như "event.clients = clientsSet" và bạn ' làm lại. Tất cả những gì tôi phải làm là tạo lại các lớp học không hoạt động (như Sự kiện của tôi). Tôi vẫn đang sử dụng một số lớp học được tạo ra từ Core Data trong XCode 7 beta 4 và điều đó đã làm tôi rối tung lên (Sự kiện đã sử dụng NSOrderedSet thay vì NSSet). – Kent

+0

Ồ, đó là điều tuyệt vời để biết, tôi là Xcode 7, beta 4. – Shripada

4

Chỉ khi bạn cờ mối quan hệ với các tùy chọn "Ordered". Nếu không, thì đó là NSSet.

Tôi không đồng ý với câu trả lời được chấp nhận bởi vì trong Swift 2.0 bắc cầu từ NSSet đến một Set xảy ra tự động, vì vậy nếu bạn có thể phân lớp các thực thể CoreData, bạn chỉ có thể viết:

@NSManaged var oneToManyOfTypeFoo: Set<Foo> 

Và sau đó thêm và loại bỏ các yếu tố trở nên tầm thường, bởi vì bạn chỉ có thể sử dụng các phương pháp insertremove từ Set.

+0

Khi bạn đã chọn tùy chọn đã đặt hàng, Xcode tự động thêm NSOrderedSet thay vì NSSet và bạn không thể sử dụng với NSOrderedSet. Làm thế nào để xử lý các hoạt động liên quan đến đơn hàng với Set ? Cảm ơn... – emreoktem

+1

'NSOrderedSet' là một cấu trúc khác và không thể chuyển thành' Set'. Như tôi thấy bạn có hai lựa chọn: đầu tiên là gắn bó với 'NSOrderedSet' để câu trả lời của tôi không liên quan đến bạn. Cách khác là bỏ chọn tùy chọn được sắp xếp và sử dụng một 'Bộ'. Sau đó, bạn có thể sắp xếp nó: 'myset.sorted (by:)' – FranMowinckel

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