मुझे पता है कि कोर डेटा की नई विशेषता अद्वितीय अवरोध है इसलिए मैं इसका परीक्षण करने का निर्णय लेता हूं। मैंने सरल स्कीमा बनाया और जब मैं एक क्षेत्र के लिए बाधा जोड़ता हूं (उदाहरण के लिए नाम) - सभी काम करता है। यदि मैं किसी अन्य फ़ील्ड (lastName) के लिए बाधा जोड़ता हूं - कोर डेटा प्रत्येक फ़ील्ड के लिए व्यक्तिगत रूप से दो अलग-अलग अवरोध बनाता है (मैंने कोशिश की कि दो फ़ील्ड कॉमा एक पंक्ति में अलग-अलग हों और प्रत्येक फ़ील्ड अलग-अलग पंक्ति में - कोई अंतर नहीं)। लेकिन मैं पहले नाम + अंतिम नाम संयोजन के लिए अद्वितीय बाधा चाहता हूं, क्या यह संभव है?
जवाब देने के लिए धन्यवाद!
2 जवाब
विशेषताओं के संयोजन के लिए विशिष्टता बाधाओं को सेट करना संभव है। आप बाधाओं पर एक ही पंक्ति में दोनों विशेषताओं को डालते हुए सही रास्ते पर थे:
आपने पाया होगा कि 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 में काम करता है; मैंने पहले संस्करणों की जाँच नहीं की है)।
ऐसा लगता है कि मॉडल एडिटर में अड़चनें सेट करने के दौरान रन पर डिस्क में परिवर्तन करने के लिए Xcode का विशिष्ट व्यवहार लागू नहीं होता है। (Xcode 7.3, मेरे मामले में।) in
उपाय? यह 1990 के बाद फिर से शुरू करें और बाधाओं को बदलने के बाद ⌘-S
मारा।
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
ios
iOS, Apple iPhone, iPod टच और iPad पर चलने वाला मोबाइल ऑपरेटिंग सिस्टम है। IOS प्लेटफॉर्म पर प्रोग्रामिंग से संबंधित प्रश्नों के लिए इस टैग [ios] का उपयोग करें। उन प्रोग्रामिंग भाषाओं के लिए विशिष्ट मुद्दों के लिए संबंधित टैग [उद्देश्य-सी] और [स्विफ्ट] का उपयोग करें।