2010-02-09 44 views
10

Có cách nào dễ dàng/chung chung để so sánh hai đối tượng để xem chúng có giống nhau hay không? Bởi 'cùng' tôi có nghĩa là tên thực thể giống hệt nhau, tất cả các thuộc tính và mối quan hệ đều giống nhau, nhưng ID đối tượng nội bộ là khác nhau.So sánh đối tượng dữ liệu chính

Tương tự, có cách nào dễ dàng/chung chung để tìm sự khác biệt không?

Trả lời

10

Bạn có cần đệ quy bao gồm sự bình đẳng của các mối quan hệ (tức là các mối quan hệ trỏ đến các điểm đến bằng với định nghĩa của bạn) không? Bạn có cần kiểm tra sự bình đẳng trên các mô hình đối tượng được quản lý không? Bạn có cần kiểm tra các giá trị không cam kết không? Giả sử câu trả lời là "không" với tất cả các, giải pháp không phải là quá khó ...

instance1 bằng instance2 theo định nghĩa của bạn nếu:

NSArray *allAttributeKeys = [[[instance1 entity] attributesByName] allKeys]; 

if([[instance1 entity] isEqual:[instance2 entity]] 
&& [[instance1 committedValuesForKeys:allAttributeKeys] isEqual:[instance2 committedValuesForKeys:allAttributeKeys]]) { 
    // instance1 "==" instance2 
} 

Nếu câu trả lời cho bất kỳ ở trên câu hỏi là "có", giải pháp phức tạp hơn nhiều.

Caveat

Tôi không chắc những điều này là một ý tưởng tốt. Bạn có thể muốn suy nghĩ lại về thiết kế của mình nếu bạn cần sử dụng giải pháp trên. Có những cách gần như chắc chắn tốt hơn để làm những gì bạn đang cố gắng để làm điều đó không chạy nguy cơ chạy afoul của ý định của Core Data.

+0

Trong khi đây là giải pháp vững chắc, tôi nhất trí nhất với Caveat của bạn. Nếu bạn phải so sánh mọi giá trị trong một đối tượng với đối tượng khác để xem liệu bạn có đang sao chép dữ liệu hay không thì có điều gì đó sai trong thiết kế và bạn cần phải nghĩ lại nó. –

5

Bạn có thể muốn đọc qua bài viết này:

http://moottoot.blogspot.com/2008/02/core-data-and-uniqueness.html

NSManagedObject có một phương pháp isEqual: mà bạn không được phép để ghi đè. Bạn đã thử sử dụng phương pháp này để kiểm tra xem nó có trả về cho các loại đối tượng khác nhau không? Các lớp khác nhau ghi đè phương thức này (NSObject) sao cho "bằng" có nghĩa là "cùng một đối tượng" hoặc "đối tượng có cùng nội dung".

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