2015-03-24 15 views
10

Tôi đang cố gắng hiểu cách mô hình hóa mối quan hệ dữ liệu phức tạp với Dữ liệu cốt lõi.iOS Swift - Ví dụ về Dữ liệu cốt lõi có mối quan hệ dữ liệu phức tạp

Với ứng dụng của mình, hiện tại tôi có một thực thể là Công thức, Thành phần và Công thức nấu ăn liên kết các thành phần với công thức.

Tôi chưa tìm thấy bất kỳ ví dụ nào về tìm nạp dữ liệu ra khỏi thực thể chung này. Tôi sẽ đánh giá cao nếu ai đó có thể đưa ra một ví dụ về một thực thể như RecipeIngredient của tôi trong Swift.

+2

là gì nó mà bạn không hiểu, và rằng bạn hy vọng sẽ học từ một ví dụ? –

Trả lời

15

Lý do bạn chưa thấy các ví dụ tương tự với thực thể RecipeIngredient của mình là bạn không cần các đối tượng chung giống như trong Dữ liệu chính. Bạn đang xử lý Dữ liệu cốt lõi như thể nó là một cơ sở dữ liệu quan hệ, nơi bạn thường sử dụng một bảng kết nối để tạo mối quan hệ nhiều-nhiều giữa các thực thể hiệu quả. Như được giải thích trong phần phụ Many-to-Many Relationships của Core Data Programming Guide, với Dữ liệu cốt lõi, tất cả những gì bạn cần làm là chỉ định mối quan hệ nhiều-nhiều theo cả hai hướng giữa hai thực thể. Lưu ý nhận xét ngoặc trong tài liệu:

(Nếu bạn có một nền tảng về quản lý cơ sở dữ liệu và điều này khiến bạn quan tâm, đừng lo lắng: nếu bạn sử dụng một cửa hàng SQLite, Core Data tự động tạo ra các trung gian tham gia . bảng cho bạn)

Dưới đây là một minh chứng về mối quan hệ như bạn nên mô hình nó, xé thẳng từ soạn thảo mô hình Xcode của:

many-to-many

Nếu bạn vẫn muốn xem các ví dụ về cách thực hiện việc này, hãy tìm kiếm thứ gì đó như "Dữ liệu cốt lõi nhiều cho nhiều mối quan hệ" và bạn sẽ tìm thấy rất nhiều. Bạn có thể bắt đầu ở đây trên StackOverflow; tìm kiếm nhanh đã bật lên một số ví dụ, bao gồm How do you manage and use "Many to many" core data relationships?.

Cập nhật: Từ nhận xét của bạn, tôi hiểu rằng bạn muốn sử dụng đối tượng trung gian để thêm thông tin về mối quan hệ giữa công thức và nguyên liệu. Điều đó trường hợp một pháp nhân khác được bảo hành. Vì vậy, chúng ta hãy nói mô hình của bạn trông như thế này:

updated model

Có vẻ như không chắc rằng bạn muốn lấy một trong những RecipeIngredient đối tượng trực tiếp; bạn có thể chỉ cần làm theo các mối quan hệ thích hợp. Vì vậy, bạn có thể tạo yêu cầu tìm nạp để tìm tất cả các Bí quyết có tên khớp với @ "bánh sô cô la". (Có rất nhiều ví dụ về yêu cầu tìm nạp bằng cách sử dụng biến vị ngữ trong tài liệu và trên toàn bộ mạng, vì vậy tôi sẽ không làm điều đó ở đây.) Yêu cầu tìm nạp của bạn sẽ trả về một loạt công thức mà chúng tôi có thể gọi cakeRecipes, nhưng bạn có thể chỉ quan tâm đến một:

Recipe *cake = cakeRecipes.firstObject; 

Bây giờ, bạn muốn biết gì về nguyên liệu cho bánh của mình? Dưới đây là danh sách các thành phần:

NSArray *ingredientNames = cake.ingredients.ingredient.name; 

Nếu bạn muốn đăng nhập tên thành phần và các khoản:

for (RecipeIngredient *i in cake.ingredients) { 
    NSLog(@"%@ %@", i.amount, i.ingredient.name); 
} 

Hoặc, bạn có thể sử dụng một yêu cầu để tìm các thành phần phù hợp với "cần tây" lấy , lưu trữ kết quả trong celeries.Sau đó, bạn có thể tìm kiếm công thức nấu ăn bao gồm cần tây:

Ingredient *celery = celeries.firstObject; 
NSArray *recipes = celery.recipes.recipe 

Nếu điều này không giúp được, có lẽ bạn có thể cụ thể hơn về vấn đề này. Ngoài ra, tôi biết bạn đã yêu cầu Swift, nhưng các ngón tay của tôi vẫn được sử dụng để Obj-C, và các chi tiết ngôn ngữ không thực sự phát huy ở đây - Dữ liệu cốt lõi hoạt động giống nhau trong cả hai ngôn ngữ.

+0

Cảm ơn. Tôi hiểu rằng Core Data không hoạt động như một cơ sở dữ liệu quan hệ. Nếu bạn nhìn vào phần phụ mối quan hệ nhiều-nhiều của tài liệu Core Data, nó nói về thực thể trung gian (khớp) nơi nó sẽ phù hợp nếu yêu cầu thuộc tính bổ sung - trong trường hợp của tôi, một thuộc tính đo lường trong thực thể RecipeIngredient. Tôi muốn tìm hiểu cách quá trình tìm nạp được thực hiện cho thực thể chung này. –

+0

Điều đó có ý nghĩa, nhưng không rõ ràng từ câu hỏi của bạn. Tuy nhiên, tôi không thấy việc tìm nạp là một vấn đề. Có vẻ như bạn không muốn tự mình tìm nạp thực thể trung gian, phải không? Vì vậy, chỉ cần sử dụng thuộc tính thích hợp của một đối tượng được quản lý (giống như một công thức) mà bạn đã có để có được đối tượng trung gian. Tôi sẽ cập nhật câu trả lời ... – Caleb

+1

Cảm ơn rất nhiều vì đã dành thời gian và chia sẻ kiến ​​thức của bạn. Bây giờ rõ ràng hơn rất nhiều. –

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