कोर डेटा के साथ शुरू! सरल शब्दों में मुश्किल

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

इस लेख में मैं एक समझदार भाषा में Apple के इस ढांचे के बारे में बात करने की कोशिश करूंगा ताकि "सबसे छोटे" प्रोग्रामर भी अपने लिए जानकारी प्राप्त कर सकें और उस न्यूनतम मात्रा में ज्ञान प्राप्त कर सकें जो उनकी परियोजनाओं में भी उनकी मदद करेगा।

छोटा मोटा


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

इस लेख के लक्षित दर्शक वे लोग हैं जिन्हें आमतौर पर कोर डेटा का कोई अनुभव नहीं था।

अच्छा ... चलो शुरू हो जाओ!


शुरू करने के लिए, आपको .xcdatamodeld फ़ाइल स्वयं बनाने की आवश्यकता है, इसे खोलने के बाद, स्क्रीन के नीचे आपको "इकाई जोड़ें" बटन दिखाई देगा। इस पर क्लिक करने से, आपका ऑब्जेक्ट मॉडल बन जाएगा:



और अब, अधिक विवरण में:

  1. आपकी इकाई आप इकाई को अपनी डेटा संरचना के रूप में सोच सकते हैं, जिसमें एक निश्चित वर्ग से विरासत है - NSManagedObject, और डेटा लेखन के लिए कुछ निश्चित क्षेत्र भी होंगे, जो बाद में और अधिक होंगे।
  2. Attributes. Entity . + . :
    • Integer 16/32/64 — . , . Int, .
      : Integer16(15)
    • Decimal/Double/Float — . , .
    • String — .
    • Boolean — .
    • Date — Date.
      NOTE: Core Data 00:00:00 UTC 1 1970 .
    • Binary Data — Data
      NOTE: Allow External Storage. Core Data , 100 , Core Data . .
    • UUID — UUID.
    • URI — URL
    • Transformable — , NSCoding.

  3. Relationship. Entity. Relationships :

    1. One-to-One
    2. One-to-Many
    3. Many-to-Many

    Relationships.

    3 Entities, Andrey, Home, Car.

    • — One-to-One Relationship.
    • 1, 2 — One-to-Many Relationship.
    • Many-to-Many Relationship . .
  4. Entity
  5. कोडजेन फील्ड। संक्षेप में, यह क्षेत्र बताता है कि NSManagedObject कक्षाओं के निर्माण को कौन नियंत्रित करेगा। ऑपरेशन में आसानी के लिए, मैन्युअल / कोई नहीं चुनें , फिर कोर डेटा आपके एंटिटी के लिए आवश्यक कक्षाएं बनाने में सक्षम होगा। इसके बारे में नीचे।

हमारी इकाई वर्ग बनाने के लिए, उपयोग करें:

संपादक> NSManagedObject उपवर्ग बनाएँ।



यदि आप अपनी विशेषताओं के लिए डिफ़ॉल्ट मान सेट करना चाहते हैं, तो विधि का उपयोग करें:

public override func awakeFromInsert() {
        super.awakeFromInsert()
        date = Date()
}

NSManagedObjectContext और PersistentStoreCoordinator के साथ काम करें


कोर डेटा स्टैक पदानुक्रम:



सरल शब्दों में, आपके सभी एंटिटीज़ को ऊपर दिए गए आरेख में प्रबंधित ऑब्जेक्ट के रूप में दिखाया गया है। हमारे सभी प्रबंधित ऑब्जेक्ट NSManagedObjectContext में संग्रहीत किए जाते हैं। संदर्भ यह NSPersistentStoreCoordinator को संदर्भित करता है जो SQL को एक्सेस करने के बाद आपके सहेजे गए डेटा को Row Cache के रूप में संग्रहीत करता है, लेकिन यह अब ऐसा नहीं है।

अपने ManagedObject (इकाई) का एक उदाहरण बनाने के लिए, आपको अपने NSPersistentContainer का उल्लेख करना होगा जो आपके NSPersistentStoreCoordinator के लिए एक आवरण है।

var persistentContainer: NSPersistentContainer = {
      let container = NSPersistentContainer(name: "SavingLearn")
      container.loadPersistentStores(completionHandler: { (storeDescription, error) in
          if let error = error as NSError? {
              fatalError("Unresolved error \(error), \(error.userInfo)")
          }
      })
      return container
  }()

इसके बाद, हमें अपने PersonContainer के माध्यम से NSManagedObjectContext तक पहुंचने की आवश्यकता है:

var context: NSManagedObjectContext = {
    return persistentContainer.viewContext
  }()

अब हम अपने संदर्भ से हमारे ManageObject का एक उदाहरण बना सकते हैं और इसे एक मूल्य प्रदान कर सकते हैं:

var person = Person(context: context)
person.age = 32

सेविंग ऑब्जेक्ट


सहेजने के लिए, हम एक साधारण फ़ंक्शन का उपयोग करते हैं:

func saveContext () {
      if context.hasChanges {
          do {
              try context.save()
          } catch {
            context.rollback()
              let nserror = error as NSError
              fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
          }
      }
  }

उपरोक्त पद्धति में, हम परिवर्तनों के लिए हमारे संदर्भ की जांच करते हैं और यदि वे मौजूद हैं, तो हम एक बचत करते हैं। त्रुटि की स्थिति में, विधि निष्पादित की जाती है:

context.rollback()

rollback()
विधि हमारे संदर्भ को उसकी मूल स्थिति में लौटा देती है और उस पर किए गए सभी परिवर्तनों को रद्द कर देती है।

वस्तु हटाओ

context.delete(object)

हमें कोर डेटा से किसी ऑब्जेक्ट को आसानी से हटाने की अनुमति देता है।
नोट: परिवर्तन प्रभावी होने के लिए, संदर्भ को सहेजना आवश्यक है, अन्यथा सभी परिवर्तन सहेजे नहीं जाएंगे।
context.save()

सभी वस्तुओं को पुनः प्राप्त करना


कोर डेटा से हमारी वस्तुओं की एक सरणी प्राप्त करने के लिए, हमें NSFetchRequest निष्पादित करना चाहिए। मैं FetchRequest की पूरी शक्ति में गहराई तक नहीं जाऊंगा क्योंकि यह लेख शुरुआती लोगों के लिए बनाया गया है।

let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()
let objects = try context.fetch(fetchRequest)

हुड के तहत, NSFetchRequest एक बड़ा काम करता है:

  1. NSFetchRequest लगातार स्टोर समन्वयक के पास जाता है
  2. परसेंट स्टोर कोऑर्डिनेटर पर्सिस्टेंट स्टोर को रिक्वेस्ट भेजता है
  3. Persistent Store SQL
  4. SQL . ID Row Value. Row Value Persistent Store Row Cache ID.
  5. Persistent Store Managed Objects ID Persistent Store Coordinator. fault () . Managed Object Context ID, Core Data SQL.
  6. Persistent Store Coordinator context Managed Object
  7. Core Data .
    includePendingChanges = false
  8. NSManagedObject

नोट: जबकि NSFetchRequest प्रबंधित ऑब्जेक्ट संदर्भ चल रहा है और स्थायी स्टोर समन्वयक एक समकालिक कतार में चल रहा है, जबकि अन्य प्रक्रिया चल रही है, सभी प्रक्रियाएँ अवरुद्ध हैं।

निष्कर्ष


इस लेख में, मैंने अपनी राय में कोर डेटा के साथ काम करने के लिए आवश्यक न्यूनतम जानकारी का वर्णन किया है।

अब आप अपने खुद के डेटा मॉडल बना सकते हैं, उन्हें बचा सकते हैं, हटा सकते हैं और पुनः प्राप्त कर सकते हैं।

यदि आप कोर डेटा और दिलचस्प युक्तियों के साथ काम करने के बारे में अधिक "अग्रिम" विषय में रुचि रखते हैं, तो टिप्पणियों में लिखें और मैं यह पता लगाऊंगा कि इसके बारे में क्या किया जा सकता है। हैप्पी कोडिंग!

All Articles