2010-02-09 20 views
10

क्या दो वस्तुओं की तुलना करने के लिए एक आसान/सामान्य तरीका है यह देखने के लिए कि वे समान हैं या नहीं? 'वही' से मेरा मतलब है समान इकाई का नाम, सभी गुण और रिश्ते समान हैं, लेकिन आंतरिक ऑब्जेक्ट आईडी अलग है।कोर डेटा ऑब्जेक्ट तुलना

इसी तरह, क्या अंतर खोजने के लिए एक आसान/सामान्य तरीका है?

उत्तर

10

क्या आपको दोबारा संबंधों की समानता शामिल करने की आवश्यकता है (यानी संबंध आपकी परिभाषा के बराबर गंतव्यों को इंगित करते हैं)? क्या आपको प्रबंधित ऑब्जेक्ट मॉडल में समानता का परीक्षण करने की आवश्यकता है? क्या आपको असामान्य मूल्यों का परीक्षण करने की आवश्यकता है? जवाब मान लिया जाये कि "नहीं" इन सभी के लिए है, समाधान भी कठिन नहीं है ...

instance1 अपनी परिभाषा द्वारा instance2 के बराबर है यदि:

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

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

यदि उपरोक्त में से किसी को जवाब प्रश्न "हां" है, समाधान काफी जटिल है।

चेतावनी

मुझे यकीन है कि इस में से किसी एक अच्छा विचार है नहीं कर रहा हूँ। यदि आप ऊपर दिए गए समाधान का उपयोग करने की आवश्यकता है तो शायद आप अपने डिजाइन पर पुनर्विचार करना चाहते हैं। आप जो करने की कोशिश कर रहे हैं, उसे करने के लिए लगभग निश्चित रूप से बेहतर तरीके हैं जो कोर डेटा के इरादों को दूर करने का जोखिम नहीं चलाते हैं।

+0

हालांकि यह एक ठोस समाधान है, मैं सबसे अधिक दृढ़ता से आपकी चेतावनी से सहमत हूं। यदि आप डेटा को डुप्लिकेट कर रहे हैं तो यह देखने के लिए कि आप प्रत्येक ऑब्जेक्ट को एक ऑब्जेक्ट में दूसरे ऑब्जेक्ट की तुलना कर रहे हैं तो डिज़ाइन में कुछ गड़बड़ है और आपको इसे फिर से सोचने की आवश्यकता है। –

5

आप इस लेख के माध्यम से पढ़ने के लिए चाहते हो सकता है:

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

NSManagedObject एक विधि isEqual: जो आप ओवरराइड करने के लिए अनुमति नहीं है नहीं है। क्या आपने यह विधि जांचने का प्रयास किया है कि यह विभिन्न प्रकार की वस्तुओं के लिए वापस आता है या नहीं? विभिन्न वर्ग इस (NSObject) विधि को ओवरराइड करते हैं ताकि "बराबर" का मतलब या तो "वही ऑब्जेक्ट" या "एक ही सामग्री वाले ऑब्जेक्ट्स" हो।