נתוני ליבה לעומת NSKeyedArchiver לעומת ברירות מחדל למשתמשים

נתוני ליבה, NSKeyedArchiver ו- UserDefaults הם שלוש דרכים בהן מתכנת יכול להתמיד בנתונים בין השקות האפליקציה. למרות שנתוני ליבה מעט מורכבים יותר, הם מועילים כאשר המידע המאוחסן דורש מבנה. NSKeyedArchiver פחות מורכב ואיטי יותר מנתוני ליבה, אך הרבה יותר פשוט לשימוש. UserDefaults היא השיטה הפשוטה ביותר להתמיד בנתונים.

נתוני ליבה

היתרונות העיקריים לנתוני ליבה כוללים:

  1. יכולת לבצע שאילתה ביעילות
  2. הנתונים בנויים כך שלכל ישות יש תכונות מסוימות (מאפייני חשיבה עם סוגים ספציפיים) ועשויות להתייחס לגופים אחרים באמצעות מערכות יחסים או לא.
  3. העברות אוטומטיות - בעצם זה פשוט אומר שאתה יוצר מודל ליבה של נתונים, נוצר בסיס נתונים של SQLite. אם לאחר מכן תשנה את מודל הנתונים (למשל להוסיף תכונות נוספות למודל הנתונים), מודל הנתונים החדש אינו תואם לחנות המתמשכת המקורית. אפל מטפלת ב"הגירה "זו מגרסת דגם נתונים אחת לאחרת עבורנו - תודה אפל !!

לפני שנתחבר לקוד, ראשית, נעבור על כמה הגדרות:

  1. NSPersistentContainer אחראי על קריאה / כתיבה לנתוני ליבה.
  2. viewContext מסוג NSManagedObjectContext. אתה יוצר מופע של אובייקט נתוני ליבה דרך NSManagedObjectContext.

על מנת לשלב נתוני ליבה בפרויקט שלך, עליך ליצור תחילה קובץ .xcdatamodel ללינת נתונים. בתוך קובץ זה תגדירו את הישויות, כולל תכונות של כל יישות, שתרצו להמשיך. לאחר יצירת קובץ ה- .xcdatamodel, הוסף פרויקט קובץ SWIFT חדש שיכלול את כל קוד לוח הדוודים לנתוני קוד. שלושה דברים שצריך לציין בקוד למטה -

  1. שם NSPeristentContainer חייב להיות זהה לקובץ .xcdatamodel.
  2. יצרתי סינגלטון כך שלאורך כל האפליקציה יש רק פעם אחת של המידע שנשמר באמצעות נתוני ליבה. אם אתה סקרן לגבי סינגלטונים / דפוסי עיצוב באופן כללי, עיין בבלוג זה.
  3. אל תשכח לייבא את CoreData לקובץ .wift!

* אם תיצור פרויקט חדש ותבחר להוסיף נתוני ליבה לפרויקט, קוד לוח הדוד שלמעלה יופיע בצירוף האפליקציות.

בנוסף לשמירת נתונים, הסיכויים הם שתרצו להביא את הנתונים כדי לאכלס את האפליקציה שלכם בפעם הבאה שהאפליקציה תושק. נניח שיצרת יישות בקובץ .xcdatamodel בשם "ספר". כפי שאתה יכול לראות בקוד שלהלן, אתה משיג נתונים באמצעות NSFetchRequest. יצרתי מערך, שנקרא "ספרים", השווה ל- [ספר] (), כלומר מערך של ישות הספר. בכל פעם שאני רוצה לאכלס את האפליקציה שלי בנתונים שנשמרו, אני קורא ל- CoreDataModel.sharedInstance.fetchWorkoutData () פונקציה ולהגדיר את הנתונים שאני רוצה לעבוד בהם שווה ל- CoreDataModel.sharedInstance.books.

הסרת מידע מנתוני ליבה היא גם מאוד פשוטה - כל שעליך לעשות הוא להביא את המידע המאוחסן ולחזור דרך המערך ולמחוק כל אובייקט מהמיכל העקשני. וואלה!

לא התעמקתי במערכות יחסים בפוסט זה, אבל הבלוג הבא צולל בכתיבת הקוד למערכות יחסים בנתוני ליבה.

NSKeyedArchiver

NSKeyedArchiver מספק את היכולת ליצור אינטראקציה ישירה עם הדיסק. באופן ספציפי, זה מסדר את NSCoding, שהוא פרוטוקול בשתי שיטות:

  1. קידוד (עם aCoder: NSCoder)
  2. init? (קידוד aDecoder: NSCoder)

בדוגמה שלהלן המטרה שלי היא להמשיך במערך של [אדם]. לאדם הכיתה יש שני מאפיינים: שם פרטי (מסוג String) ו- LastName (מסוג String). כפי שניתן לראות מהקוד שלהלן, אדם מחלקה מאמץ ומתאים לפרוטוקול NSCoding.

האחסון והשליפה של נתונים באמצעות NSKeyedArchiver הוא פשוט מאוד. כאשר ברצונך לאחסן מידע, אתה יכול פשוט להתקשר אל NSKeyedArchiver.archiveRootObject - זוהי שיטה מובנית.

באופן דומה, כאשר ברצונך לאחזר נתונים מתמשכים, אתה יכול לקרוא לפונקציה מובנית אחרת, NSKeyedUnarchiver.unarchiveObject.

כפי שאתה יכול לראות, NSKeyedArchiver הוא הרבה יותר פשוט ליישום מאשר נתוני Core והיא אפשרות אטרקטיבית להתמיד בנתונים.

ברירות מחדל למשתמשים

UserDefaults היא כיתה המאפשרת אחסון פשוט של סוגי נתונים שונים. הוא משמש בעיקר לאחסון כמויות קטנות של נתונים כדי להימשך בין השקות אפליקציה או הפעלה מחדש של המכשיר. UserDefaults יכולים לאחסן סוגים בסיסיים (bool, float, double, int וכו ') וסוגים מורכבים יותר (מערך, מילון). למרות של UserDefaults אין מבנה, אומרים שהוא מהיר יותר מנתוני ליבה מכיוון שכל מה שיש להם זה זוגות ערכי מפתח. מכיוון שאין לו מבנה, כדאי לאחסן נתונים שאינם דורשים מבנה - מכאן העדפות המשתמש.

דבר אחד שיש לשים לב הוא אם אתה מאפס מפתח, הנתונים שנשמרו יוחלפו. עם זאת, שני המקשים חייבים להיות זהים - אם מקש אחד כולל את כל האותיות הקטנות ולמפתח השני יש אותיות גדולות, הנתונים הקיימים לא יוחלפו.

תודה שקראת וקידוד שמח !!

הפניות:

https://www.hackingwithswift.com/example-code/system/how-to-save-user-settings-using-userdefaults