मुझे पता है कि कोर डेटा की नई विशेषता अद्वितीय अवरोध है इसलिए मैं इसका परीक्षण करने का निर्णय लेता हूं। मैंने सरल स्कीमा बनाया और जब मैं एक क्षेत्र के लिए बाधा जोड़ता हूं (उदाहरण के लिए नाम) - सभी काम करता है। यदि मैं किसी अन्य फ़ील्ड (lastName) के लिए बाधा जोड़ता हूं - कोर डेटा प्रत्येक फ़ील्ड के लिए व्यक्तिगत रूप से दो अलग-अलग अवरोध बनाता है (मैंने कोशिश की कि दो फ़ील्ड कॉमा एक पंक्ति में अलग-अलग हों और प्रत्येक फ़ील्ड अलग-अलग पंक्ति में - कोई अंतर नहीं)। लेकिन मैं पहले नाम + अंतिम नाम संयोजन के लिए अद्वितीय बाधा चाहता हूं, क्या यह संभव है?

जवाब देने के लिए धन्यवाद!

10
Anton 15 नवम्बर 2015, 02:21

2 जवाब

सबसे बढ़िया उत्तर

विशेषताओं के संयोजन के लिए विशिष्टता बाधाओं को सेट करना संभव है। आप बाधाओं पर एक ही पंक्ति में दोनों विशेषताओं को डालते हुए सही रास्ते पर थे:

Data Model Editor snapshot

आपने पाया होगा कि Xcode के साथ एक समस्या के कारण इसका कोई प्रभाव नहीं था: बाधाओं को वास्तव में मॉडल में अपडेट नहीं किया जाता है जब तक कि आप एक ही समय में मॉडल के कुछ अन्य पहलू को संशोधित नहीं करते हैं (उदाहरण के लिए एक विशेषता प्रकार बदलें और फिर इसे वापस बदलें) ।

यदि आप SQL के उत्पन्न होने पर गौर करते हैं, तो तालिका एक बाधा के साथ बनाई गई है:

CREATE TABLE ZSTOREOBJECT ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ...., CONSTRAINT ZLASTNAME_ZFIRSTNAME UNIQUE (ZLASTNAME, ZFIRSTNAME))

और जब आप नए इन्सर्ट नए मान डालते हैं जो इस बाधा को विफल करते हैं (जब संदर्भ सहेजा जाता है):

CoreData: sql: COMMIT
CoreData: sql: BEGIN EXCLUSIVE
CoreData: sql: INSERT INTO ZSTOREOBJECT(Z_PK, Z_ENT, Z_OPT) VALUES(?, ?, ?)
CoreData: sql: UPDATE ZSTOREOBJECT SET ZLASTNAME = ?, ZFIRSTNAME = ? WHERE Z_PK = ?
CoreData: sql: ROLLBACK

और दी गई त्रुटि है:

Error Domain=NSCocoaErrorDomain Code=133021 "(null)" UserInfo={conflictList=(
"NSConstraintConflict (0x7fbd18d33c10) for constraint (\n    lastName,\n    firstName\n): ....

(यह iOS9.2 सिम्युलेटर के साथ Xcode 7.2.1 में काम करता है; मैंने पहले संस्करणों की जाँच नहीं की है)।

11
pbasdf 28 फरवरी 2016, 11:52

ऐसा लगता है कि मॉडल एडिटर में अड़चनें सेट करने के दौरान रन पर डिस्क में परिवर्तन करने के लिए Xcode का विशिष्ट व्यवहार लागू नहीं होता है। (Xcode 7.3, मेरे मामले में।) in

उपाय? यह 1990 के बाद फिर से शुरू करें और बाधाओं को बदलने के बाद ⌘-S मारा।

4
Matt 30 नवम्बर 2016, 11:32