Core Data Apple का एक डेटा प्रबंधन फ्रेमवर्क है जो iOS, macOS, tvOS और watchOS के लिए ऑब्जेक्ट-रिलेशनल मैपिंग प्रदान करता है। यह एप्लिकेशन में ऑब्जेक्ट्स को सहेजने, प्राप्त करने और फ़िल्टर करने को स्वचालित करता है, जो SQLite, XML या बाइनरी स्टोरेज के ऊपर काम करता है। Apple Core Data Documentation के अनुसार, फ्रेमवर्क पर्सिस्टेंस स्टैक को प्रबंधित करने के लिए Managed Object Context और NSPersistentContainer अवधारणाओं का उपयोग करता है।
मुख्य बिंदु
Core Data एक ऑब्जेक्ट ग्राफ और पर्सिस्टेंस प्रबंधन फ्रेमवर्क है जो Cocoa Touch का हिस्सा है। आम ग़लतफ़हमी के विपरीत, Core Data एक डेटाबेस नहीं है, बल्कि एक ऑब्जेक्ट प्रबंधन परत है जो SQLite को अपने स्टोर में से एक के रूप में उपयोग कर सकती है। Core Data का मुख्य कार्य ऑब्जेक्ट परिवर्तनों को ट्रैक करना, उनके जीवनचक्र का प्रबंधन करना और डिस्क के साथ स्थिति को सिंक्रोनाइज़ करना है।
फ्रेमवर्क एक ऑब्जेक्ट ग्राफ प्रदान करता है जहां प्रत्येक Managed Object को संदर्भ द्वारा परिवर्तनों के लिए ट्रैक किया जाता है। सहेजने पर, सभी संशोधित, जोड़े और हटाए गए ऑब्जेक्ट एक ही लेन-देन में स्थायी स्टोर में कमिट हो जाते हैं। यह डेवलपर को SQL क्वेरी लिखने और मैन्युअल रूप से लेन-देन प्रबंधित करने की आवश्यकता को समाप्त करता है।
Swift Developer Survey (2025) के आंकड़ों के अनुसार, Core Data का उपयोग स्थानीय डेटा के साथ काम करने वाले 52% iOS एप्लिकेशन में किया जाता है। आधुनिक विकल्पों (SwiftData, Realm) के उभरने के बावजूद, Core Data अपनी परिपक्वता और गहन सिस्टम एकीकरण के कारण मौजूदा Apple प्रोजेक्ट्स में प्राथमिक फ्रेमवर्क बना हुआ है।
Core Data का उपयोग मध्यम जटिलता वाले डेटा मॉडल वाले प्रोजेक्ट्स के लिए करें, जहां ऑब्जेक्ट संबंधों, परिवर्तनों को वापस लेने और faulting तंत्र के माध्यम से स्वचालित कैशिंग की आवश्यकता होती है।
Core Data आर्किटेक्चर Managed Object Context की अवधारणा के आसपास बनाया गया है — एक कार्यक्षेत्र जो सभी ऑब्जेक्ट परिवर्तनों को ट्रैक करता है। संदर्भ बिल्ट-इन NSUndoManager के माध्यम से पूर्ववत/पुनः करने का समर्थन करता है, जो मैन्युअल रूप से स्थिति स्नैपशॉट सहेजे बिना ड्राफ्ट और क्रिया रद्दीकरण को लागू करने की अनुमति देता है। save() कॉल करने पर, संदर्भ सभी परिवर्तनों को एक ही लेन-देन में स्थायी स्टोर में कमिट करता है, जिससे डेटा की परमाणुता और संगति सुनिश्चित होती है।
Core Data डेटा मॉडल .xcdatamodeld फ़ाइल में परिभाषित किया जाता है — Xcode का विज़ुअल एडिटर जहां सभी Entity, उनके गुण और संबंध वर्णित होते हैं। संकलन के समय, मॉडल .momd में सीरियलाइज़ होता है और NSManagedObjectModel के माध्यम से लोड होता है।
Entity एक डेटा प्रकार का विवरण है, जो SQL में तालिका के समान है। प्रत्येक Entity में Attributes का एक सेट होता है — डेटा प्रकार (String, Integer, Date, Boolean, Data) वाले नामित फ़ील्ड। Room के विपरीत, Core Data को मॉडल एडिटर के माध्यम से प्रत्येक गुण के लिए स्पष्ट प्रकार चयन की आवश्यकता होती है।
Relationship Entity के बीच एक कनेक्शन है, जो SQL में विदेशी कुंजी के समान है। Core Data सभी प्रकार के संबंधों का समर्थन करता है: एक-से-एक, एक-से-अनेक और अनेक-से-अनेक। प्रत्येक संबंध के लिए Delete Rule (Cascade, Nullify, Deny) कॉन्फ़िगर की जाती है — संबंधित ऑब्जेक्ट हटाए जाने पर व्यवहार।
| Delete Rule | हटाने पर व्यवहार | उपयोग उदाहरण |
|---|---|---|
| Cascade | सभी संबंधित ऑब्जेक्ट्स को हटाता है | ऑर्डर को उसकी वस्तुओं के साथ हटाना |
| Nullify | विपरीत संबंध को शून्य करता है | पुस्तकों को हटाए बिना लेखक को हटाना |
| Deny | यदि संबंधित ऑब्जेक्ट मौजूद हैं तो हटाने को रोकता है | उत्पादों वाली श्रेणी को हटाने से सुरक्षा |
Delete Rule चुनना डेटा अखंडता के लिए महत्वपूर्ण है: Cascade बिना जांच के डेटाबेस का एक तिहाई हटा सकता है, जबकि Deny अस्पष्ट त्रुटि के साथ ऑपरेशन को रोक सकता है। प्रोडक्शन कोड में, मैन्युअल अनाथ रिकॉर्ड हैंडलिंग के साथ Nullify की अनुशंसा की जाती है।
Xcode मॉडल एडिटर में, डेवलपर न केवल Entity और गुण बल्कि constraints (अद्वितीय बाधाएं), क्वेरी त्वरण के लिए इंडेक्स और गुणों के लिए डिफ़ॉल्ट मान भी परिभाषित कर सकता है। सभी मॉडल परिवर्तन .momd फ़ाइल में संकलित होते हैं, जो NSPersistentContainer आरंभीकरण के दौरान लोड होती है। मॉडल वर्ज़निंग (Model Versioning) कई स्कीमा संस्करणों को बनाए रखने और उनके बीच माइग्रेशन करने की अनुमति देता है।
NSPersistentContainer एक एकल ऑब्जेक्ट है जो iOS 10 और macOS 10.12 से Core Data स्टैक का प्रबंधन करता है। यह NSManagedObjectModel, NSPersistentStoreCoordinator और NSManagedObjectContext को एनकैप्सुलेट करता है, मॉडल लोडिंग और स्टोर कॉन्फ़िगरेशन को स्वचालित करता है। पुराने संस्करणों के लिए, स्टैक मैन्युअल रूप से बनाया जाता था, लेकिन अब इसकी अनुशंसा नहीं की जाती है।
let container = NSPersistentContainer(name: "DataModel")
container.loadPersistentStores { _, error in
if let error { fatalError("Core Data load failed: \(error)") }
}
let context = container.viewContext
viewContext मुख्य थ्रेड से जुड़ा मुख्य संदर्भ है। सभी रीड और UI अपडेट इसके माध्यम से किए जाते हैं। प्रदर्शन के लिए, डेटा लेखन को बाद में सिंक्रोनाइज़ेशन के साथ बैकग्राउंड चाइल्ड कॉन्टेक्स्ट पर करने की अनुशंसा की जाती है।
NSPersistentStoreCoordinator कोऑर्डिनेटर मॉडल को डिस्क पर भौतिक स्टोरेज से जोड़ता है। Core Data कई प्रकार के स्टोर का समर्थन करता है: SQLite (अनुशंसित), Binary और In-Memory। SQLite स्टोर माइग्रेशन, वृद्धिशील बैकअप और लेखन संचालन के दौरान क्रैश प्रतिरोध का समर्थन करता है।
NSFetchRequest एक ऑब्जेक्ट है जो Core Data स्टोर में क्वेरी का वर्णन करता है। इसमें Entity का नाम, फ़िल्टर प्रेडिकेट, सॉर्ट डिस्क्रिप्टर और फ़ेच सेटिंग्स शामिल हैं। क्वेरी context.fetch() के माध्यम से निष्पादित होती है, जो NSManagedObject की एक सरणी लौटाती है।
let request = NSFetchRequest<User>(entityName: "User")
request.predicate = NSPredicate(format: "age >= %d", 18)
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
request.fetchLimit = 50
let results = try context.fetch(request)
NSPredicate जटिल शर्तों का समर्थन करता है: LIKE, IN, BETWEEN, CONTAINS[c] (केस-असंवेदनशील), संबंधित Entity पर नेस्टेड क्वेरी के लिए SUBQUERY। Core Data NSFetchedResultsController का भी समर्थन करता है — UITableView में प्रतिक्रियाशील डेटा लोडिंग के लिए एक क्लास, जो स्वचालित रूप से परिवर्तनों को ट्रैक करती है और एनिमेटेड सेक्शन के साथ तालिका को अपडेट करती है।
मल्टीथ्रेडेड एप्लिकेशन में Core Data के साथ काम करने के लिए सख्त नियमों का पालन आवश्यक है: NSManagedObject को सीधे थ्रेड के बीच पास नहीं किया जा सकता। प्रत्येक थ्रेड (या क्यू) को अपने स्वयं के संदर्भ का उपयोग करना चाहिए। मुख्य दृष्टिकोण लेखन के लिए निजी क्यू (NSPrivateQueueConcurrencyType) के साथ चाइल्ड NSManagedObjectContext और पढ़ने के लिए viewContext बनाना है।
चाइल्ड कॉन्टेक्स्ट पैरेंट में सहेजता है, और फिर पैरेंट डिस्क स्टोर में सहेजता है। यह गारंटी देता है कि परिवर्तन मुख्य थ्रेड को ब्लॉक नहीं करते हैं और UI हमेशा mergeChanges या सहेजने पर स्वचालित viewContext अपडेट के माध्यम से एक सुसंगत स्थिति देखता है।
Core Data faulting का उपयोग करता है — संबंधित ऑब्जेक्ट्स के लिए एक विलंबित लोडिंग तंत्र। User को उसके पतों का अनुरोध किए बिना प्राप्त करते समय, संबंधित Address ऑब्जेक्ट तब तक लोड नहीं होते जब तक उन्हें डॉट नोटेशन के माध्यम से एक्सेस नहीं किया जाता। Faulting मेमोरी बचाता है और लोडिंग को गति देता है, लेकिन बैकग्राउंड कॉन्टेक्स्ट में एक्सेस को नियंत्रित नहीं करने पर मुख्य थ्रेड पर अप्रत्याशित डिस्क एक्सेस का कारण बन सकता है।
कुशल मल्टीथ्रेडिंग के लिए, बिना मेमोरी में ऑब्जेक्ट लोड किए बल्क इंसर्ट और डिलीट के लिए NSBatchInsertRequest और NSBatchDeleteRequest का उपयोग करें — यह सर्वर के साथ डेटा सिंक्रोनाइज़ेशन के लिए महत्वपूर्ण है।
बैच ऑपरेशन संदर्भ और ऑब्जेक्ट ग्राफ को छोड़कर सीधे NSPersistentStoreCoordinator स्तर पर निष्पादित होते हैं। यह मेमोरी में 10,000 NSManagedObject इंस्टेंस बनाए बिना मिलीसेकंड में 10,000 रिकॉर्ड डालने की अनुमति देता है। बैच अनुरोध निष्पादित करने के बाद, संदर्भ को mergeChangesFromContextDidSaveNotification के माध्यम से अपडेट किया जाना चाहिए ताकि UI नए डेटा को प्रतिबिंबित करे। Apple प्रारंभिक डेटा लोडिंग और रात्रि सर्वर सिंक्रोनाइज़ेशन के लिए बैच ऑपरेशन की अनुशंसा करता है।
Core Data में परिवर्तन ट्रैकिंग के लिए NSPersistentHistoryTracking का उपयोग किया जाता है — एक तंत्र जो प्रत्येक लेन-देन (इंसर्ट, अपडेट, डिलीट) को एक अलग इतिहास में रिकॉर्ड करता है। इतिहास ट्रैकिंग सक्षम करने से समान SQLite फ़ाइल के साथ काम करने वाली विभिन्न प्रक्रियाओं और एप्लिकेशनों के बीच डेटा सिंक्रोनाइज़ेशन की अनुमति मिलती है, उदाहरण के लिए मुख्य एप्लिकेशन और Notification Service Extension के बीच। सक्रियण NSPersistentStoreDescription के माध्यम से persistentHistoryTrackingKey फ़्लैग के साथ किया जाता है, और पढ़ना NSPersistentHistoryChangeRequest के माध्यम से तिथि और लेन-देन प्रकार के अनुसार फ़िल्टर करके किया जाता है।
Core Data के डिबगिंग और प्रदर्शन प्रोफाइलिंग के लिए macOS पर Xcode में Instruments सूट से Core Data Profiler टूल का उपयोग किया जाता है। यह प्रत्येक ऑपरेशन की अवधि और तालिकाओं और टाइमलाइन ग्राफ़ में लोड किए गए ऑब्जेक्ट्स की संख्या के साथ सभी फ़ेच, इंसर्ट, डिलीट और सेव ऑपरेशन दिखाता है। डेवलपर समस्या क्षेत्रों की पहचान कर सकता है: एक ही क्वेरी के कई फ़ेच (कैशिंग की कमी), तालिका स्क्रॉल करते समय fault ऑब्जेक्ट लीक या संबंधित संस्थाओं की सिंक्रोनस लोडिंग के कारण मुख्य थ्रेड ब्लॉकिंग। सिम्युलेटर पर नहीं बल्कि वास्तविक डिवाइस पर प्रोफाइलिंग चलाने की अनुशंसा की जाती है, क्योंकि सिम्युलेटर का प्रदर्शन iPhone या iPad पर एप्लिकेशन के वास्तविक व्यवहार को प्रतिबिंबित नहीं करता है।
अक्सर पूछे जाने वाले प्रश्न
Core Data डेटाबेस नहीं है, बल्कि एक ऑब्जेक्ट प्रबंधन परत है जो SQLite को स्टोर के रूप में उपयोग कर सकती है। सीधे SQLite के विपरीत, Core Data ऑब्जेक्ट परिवर्तनों को ट्रैक करता है, पूर्ववत प्रबंधित करता है और faulting और कैशिंग के साथ ऑब्जेक्ट ग्राफ प्रदान करता है। SQLite क्वेरी पर अधिक नियंत्रण देता है, लेकिन SQL लिखने और मैन्युअल रूप से लेन-देन प्रबंधित करने की आवश्यकता होती है।
Core Data गैर-विनाशकारी परिवर्तनों के लिए लाइटवेट माइग्रेशन (Lightweight Migration) का समर्थन करता है: गुण जोड़ना, नाम बदलना, डिफ़ॉल्ट मान सेट करना। जटिल परिवर्तनों के लिए, Mapping Model बनाया जाता है। Lightweight माइग्रेशन NSPersistentStoreDescription में shouldMigrateAutomatically फ़्लैग के माध्यम से सक्षम किया जाता है।
हाँ, Core Data SwiftUI के साथ @FetchRequest रैपर के माध्यम से क्वेरी के लिए और @ObservedObject के माध्यम से परिवर्तन सदस्यता के लिए एकीकृत होता है। जब ManagedObject बदलता है तो SwiftUI स्वचालित रूप से View को अपडेट करता है, जो Core Data और SwiftUI को स्थिति प्रबंधन के लिए एक संगत स्टैक बनाता है।
Fault Core Data ग्राफ में एक हल्का प्लेसहोल्डर है जिसमें संबंधित ऑब्जेक्ट का डेटा नहीं होता है। fault सेट करने पर (refreshObject: के माध्यम से), डेटा मेमोरी से अनलोड हो जाता है। किसी प्रॉपर्टी तक पहुँचने पर, fault स्वचालित रूप से स्टोर से डेटा से भर जाता है — यह एक विलंबित लोडिंग तंत्र है जो मेमोरी उपयोग को अनुकूलित करता है।
परीक्षण के लिए, In-Memory स्टोर प्रकार का उपयोग करें: NSPersistentStoreDescription NSInMemoryStoreType के साथ। कंटेनर परीक्षण बंडल से मॉडल के साथ बनाया जाता है। प्रत्येक परीक्षण के बाद, सभी ऑब्जेक्ट हटाएं या कंटेनर को पुनः बनाएं — यह परीक्षण मामलों को एक दूसरे से अलग करने की गारंटी देता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें