بدءًا من البيانات الأساسية! صعب بكلمات بسيطة

تمت كتابة العديد من المواضيع بالفعل باستخدام البيانات الأساسية ، ولكن معظم هذه المقالات باللغة الإنجليزية ، بالإضافة إلى استخدام الكثير من الكلمات "الذكية" التي يمكن أن تربك المبتدئين.

في هذه المقالة ، سأحاول التحدث عن هذا الإطار من Apple بلغة مفهومة حتى يتمكن المبرمجون "الأصغر" من الحصول على المعلومات لأنفسهم والحصول على الحد الأدنى من المعرفة التي ستساعدهم في مشاريعهم أيضًا.

Offtopic صغير


Core Data هي أداة قوية للغاية تسمح لك بحفظ البيانات في تطبيقك واستخدامها لاحقًا. في هذه المقالة ، لن أتحدث عن العمل مع سياق متعدد مع المزامنة اللاحقة ، وكيفية حل مشاكل الترحيل والعديد من الميزات المتقدمة.

الجمهور المستهدف من هذه المقالة هو الأشخاص الذين ليس لديهم خبرة عامة في البيانات الأساسية.

حسنًا ... لنبدأ!


للبدء ، تحتاج إلى إنشاء ملف .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. حقل Codegen. باختصار ، يشير هذا الحقل إلى من سيحكم إنشاء فئات NSManagedObject. لسهولة التشغيل ، حدد يدوي / لا شيء ، ثم ستتمكن البيانات الأساسية من إنشاء الفئات اللازمة للكيان نفسه. حول ذلك أدناه.

لإنشاء فئة الكيان الخاصة بنا ، استخدم:

Editor> Create NSManagedObject Subclass.



إذا كنت تريد تعيين القيم الافتراضية لسماتك ، فاستخدم الطريقة:

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

العمل مع NSManagedObjectContext و PersistentStoreCoordinator


التسلسل الهرمي



لمكدس البيانات الأساسية: بعبارات بسيطة ، يتم عرض جميع كياناتك على أنها كائنات مُدارة في الرسم البياني أعلاه. يتم تخزين جميع الكائنات المُدارة لدينا في NSManagedObjectContext. السياق يشير إلى NSPersistentStoreCoordinator الذي يقوم بتخزين بياناتك المحفوظة في ذاكرة التخزين المؤقت للصف بعد الوصول إلى SQL ، ولكن هذا ليس هو الحال الآن.

لإنشاء مثيل لـ 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
  }()

بعد ذلك ، نحتاج إلى الوصول إلى NSManagedObjectContext من خلال PersistentContainer:

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