2010-09-13 20 views
5

Tôi có mối quan hệ 1-nhiều trong biểu đồ Dữ liệu cốt lõi và tôi đang cố gắng hiểu sự khác biệt giữa việc sử dụng phương thức CoreDataGeneratedAccessors và một nhiệm vụ đơn giản để thay đổi mối quan hệ. Ví dụ: Core Data Programming Guide có một bộ phận và ví dụ về nhân viên. Trong ví dụ mà họ sử dụng các CoreDataGeneratedAccessors thuê và nhân viên cứu hỏa:Core-Data CoreDataGeneratedTrình xử lý so với phép gán đơn giản

[aDepartment addEmployeesObject:newEmployee]; 
[aDepartment removeEmployeesObject:firedEmployee]; 

Họ không xác định một mối quan hệ nghịch đảo, nhưng nói "bộ phận" là mối quan hệ nghịch đảo để "người lao động". Sau đó có nên thực hiện điều tương tự không?

newEmployee.department = aDepartment 
firedEmployee.department = nil; 

Theo phần Manipulating Relationships and Object Graph Integrity của Programming Guide Core Data, các ví dụ sau sẽ tự động sửa chữa tất cả các mối quan hệ để duy trì biểu đồ nhất quán. Nếu trường hợp đó xảy ra, có lý do nào để sử dụng CoreDataGeneratedAccessors khi một mối quan hệ nghịch đảo tồn tại không? Việc sử dụng CoreDataGeneratedAccessors có duy trì tính nhất quán của đồ thị trên các mối quan hệ nghịch đảo không?

Trả lời

2

Họ không xác định một mối quan hệ nghịch đảo , nhưng nói "bộ phận" là mối quan hệ nghịch đảo để "người lao động". Nếu sau thì sẽ thực hiện điều tương tự?

Cả hai thao tác đều có cùng kết quả bất kể kết thúc của mối quan hệ (ngược lại) bạn sửa đổi.

Nếu trường hợp đó xảy ra, có lý do nào để sử dụng CoreDataGeneratedAccessors khi có mối quan hệ nghịch đảo không? Việc sử dụng CoreDataGeneratedAccessors có duy trì tính nhất quán của đồ thị trên các mối quan hệ nghịch đảo không?

Tính thống nhất không phải là vấn đề với cả hai phương pháp. Vì lý do hiệu suất, điều quan trọng là phải sửa đổi các mối quan hệ lớn với các phương pháp thích hợp.

Giải pháp 1 (bắn tất cả nhân viên của một bộ phận)

for (Employee* employee in aDepartment.employees) 
{ 
    employee.department = nil 
} 

Giải pháp 2

aDepartment.employees = nil; 

Các giải pháp đầu tiên sẽ kích hoạt một bản cập nhật của một (bàn) xem sau mỗi hoạt động trong khi thứ hai sẽ dẫn đến chính xác một bản cập nhật của tất cả các chế độ xem. Điều này có thể là một sự khác biệt lớn nếu bạn xử lý một số lượng lớn các đối tượng.

Nếu bạn cần thêm thông tin chuyên sâu, tôi nghĩ rằng các chủ đề tương tự đã được thảo luận trên SO.

+0

Martin- cảm ơn câu trả lời. Tôi có tình huống mà tôi có thể sử dụng [aDepartment addEmployeesObject: newEmployee] một lần, nhưng các cuộc gọi tiếp theo trong ứng dụng (bất kể nếu nó trên một newEmployee) không cập nhật. Tuy nhiên, thay thế nó bằng newEmployee.department = aDepartment luôn hoạt động. Các hành vi của hai cuộc gọi dường như không phù hợp, vì vậy tôi bối rối họ có nghĩa vụ phải làm điều tương tự. Ý tưởng? – chris

+0

@chris - có vẻ như bạn không có mối quan hệ nghịch đảo giữa thực thể Sở và thực thể Nhân viên. – TechZen

+0

Tôi chỉ trải qua hành vi như vậy trong một số tình huống đặc biệt khi quan sát được kích hoạt trong một số xử lý thay đổi dữ liệu cốt lõi và mã quan sát sửa đổi quan hệ.(đây là lỗi của mã của tôi) –

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