2013-01-25 35 views
7

NSMergeByPropertyObjectTrumpMergePolicyNSOverwriteMergePolicy giống nhau trong một điều. Các tài sản ghi đè lên một trong các cửa hàng.Xung đột trong NSManagedObject là gì và sự khác biệt giữa một số chính sách hợp nhất là gì?

Vậy khác nhau giữa chúng là gì? Trong mọi trường hợp tôi có thể nghĩ đến, liệu một trong những cửa hàng liên tục đã thay đổi hay không, tài sản ghi đè lên các cửa hàng liên tục.

Ngoài ra xung đột là gì?

Tôi nghĩ xung đột đơn giản có nghĩa là dữ liệu khác nhau. Điều này có nghĩa là dữ liệu cốt lõi ban đầu được thiết kế khi dữ liệu được viết không thể cập nhật được?

Nếu xung đột khác với "dữ liệu khác", thì sự khác biệt giữa NSOverwriteMergePolicyNSErrorMergePolicy là gì?

Trong cả hai trường hợp, sự khác biệt dữ liệu đơn thuần không phải là xung đột và do đó không thể có xung đột.

Trả lời

10

Điều này có nghĩa là dữ liệu cốt lõi ban đầu được thiết kế khi dữ liệu được viết không thể cập nhật được?

Không. Nó sẽ không được sử dụng nhiều nếu đúng như vậy, phải không?

Ngoài ra xung đột là gì?

Trong dữ liệu cốt lõi, xung đột có thể xảy ra khi bạn có nhiều ngữ cảnh đối tượng được quản lý (MOC) truy cập cùng một kho dữ liệu. Điều này là phổ biến trong các ứng dụng đa luồng. Mỗi MOC có thể lưu các thay đổi độc lập với nhau. Nhưng bạn muốn giữ một cái nhìn nhất quán về dữ liệu trên tất cả các luồng, vì vậy có thể được thông báo rằng các thay đổi đã được lưu trên một MOC và hợp nhất các thay đổi đó vào một ngữ cảnh khác. Điều đó giữ cho các ngữ cảnh đồng bộ.

Nhưng điều gì sẽ xảy ra nếu bạn cố hợp nhất các thay đổi vào MOC và nó có các thay đổi chưa lưu khác nhau cho cùng một dữ liệu? Giống như, cả hai MOC đã thay đổi cùng một thuộc tính trên cùng một cá thể, và chúng đã thay đổi nó thành các giá trị khác nhau. Đây là khi xảy ra xung đột. Nếu bạn cố gắng hợp nhất các thay đổi, kết quả phụ thuộc vào chính sách hợp nhất của MOC. Theo mặc định, nó sử dụng NSErrorMergePolicy, có nghĩa là hợp nhất không thành công và mã của bạn cần phải sắp xếp và giải quyết xung đột bằng cách nào đó. Có một số chính sách hợp nhất được tích hợp sẵn áp dụng các lược đồ phân giải tự động khác nhau cho xung đột.

Bốn sơ đồ phân giải được xây dựng trong ưu tiên cho các thay đổi trên đĩa hoặc thay đổi trong bộ nhớ. Chúng cũng khác nhau về cách chúng xử lý các thay đổi trong bộ nhớ không xung đột. Ví dụ: NSMergeByPropertyStoreTrumpMergePolicy cập nhật mọi thay đổi xung đột trong bộ nhớ để khớp với các thay đổi từ MOC khác, nhưng để lại các thay đổi không xung đột tại chỗ. NSRollbackMergePolicy khác ở chỗ nó hoàn toàn loại bỏ các thay đổi trong bộ nhớ, ngay cả khi chúng không xung đột với các thay đổi mới từ MOC khác. Bạn cũng có thể tạo chính sách hợp nhất của chính mình nếu không có sơ đồ tích hợp nào có vẻ đúng.

Trong cả hai trường hợp, sự khác biệt dữ liệu đơn thuần không phải là xung đột và do đó không thể có xung đột.

Chắc chắn có thể có xung đột. Đó là một kịch bản rất phổ biến.

+0

Vì vậy, chìa khóa ở đây là sự khác biệt dữ liệu đơn thuần không phải là xung đột.Đó là sự khác biệt dữ liệu chưa lưu trên cùng một đối tượng trở thành xung đột. –

+0

Phải, nếu một trong các bối cảnh đối tượng được quản lý không có thay đổi đối với thuộc tính, thay đổi từ một MOC khác không phải là xung đột-- đó chỉ là thông tin mới. –

+0

Đó là chìa khóa. Cảm ơn. –