PracticU

דטה בייס מקומי לאפליקציה תוך שימוש במערכת CoreData

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode › דטה בייס מקומי לאפליקציה תוך שימוש במערכת CoreData
מילון מושגים:
בוליאני - סוג נתונים שיכול לקבל אחד משני ערכים בלבד: אמת (true) או שקר (false).
מסד נתונים - אוסף מאורגן של נתונים המאוחסן כך שאפשר לשמור, לחפש, לעדכן ולשלוף אותו ביעילות, לרוב באמצעות שפת שאילתות.
Singleton - דפוס עיצוב שמבטיח שממחלקה מסוימת יהיה מופע אחד בלבד, עם נקודת גישה גלובלית אליו.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
View - רכיב שאחראי על הצגת המידע למשתמש (התצוגה) בדפוס MVC. גם טבלה וירטואלית מבוססת שאילתה במסד נתונים.
MVC - דפוס ארכיטקטורה שמפריד יישום לשלושה חלקים: מודל (נתונים), תצוגה (View) ובקר (Controller).
Xcode - סביבת הפיתוח של אפל לכתיבת אפליקציות ל-iOS ול-macOS.
iOS - מערכת ההפעלה של אפל למכשירי iPhone ו-iPad.

דטה בייס מקומי לאפליקציה תוך שימוש במערכת CoreData
מה עושים כשצריך לשמור מידע בתוך הטלפון של המשתמש בלי להכיר שפת דאטאבייס? Core Data היא מערכת לניהול אובייקטים שנשמרת מקומית במכשיר, ולא בענן. בשיעור בונים אפליקציה שמבצעת עליה את ארבע הפעולות הבסיסיות: יצירה, קריאה, עדכון ומחיקה.
איך זה עובד
1. Data Model: קובץ xcdatamodeld שבו מגדירים ישויות (Entities) ותכונות. בדוגמה הישות Person כוללת שם פרטי, שם משפחה, תאריך יצירה ו-gender מסוג בוליאני. אפשר לקבוע לכל תכונה אם היא אופציונלית.
2. אובייקטים מנוהלים: האובייקטים הם מסוג NSManagedObject וחיים בתוך ה-Context. כששומרים את ה-Context, כל האובייקטים נכתבים לדיסק.
3. שמירה: מקבלים NSEntityDescription לפי שם הישות, יוצרים אובייקט מנוהל, קובעים לו ערכים עם setValue(forKey:) ושומרים את ה-Context עם save בתוך do/try/catch.
4. שליפה: יוצרים NSFetchRequest ומריצים אותו מול ה-Context. מקבלים מערך של אובייקטים מנוהלים, ושולפים מהם ערכים עם value(forKey:) וביצוע cast.
5. AppDelegate: אובייקט משותף לכל האפליקציה שרץ בהפעלתה. Core Data מוסיפה בו את ה-Container ואת הפונקציה saveContext. אפשר להגיע אליו מכל מקום עם UIApplication.shared.delegate.
6. יצירת קלאסים: ב-Codegen אפשר לבחור Manual/None, Class Definition או ליצור קלאסים דרך Editor ואז Create NSManagedObject Subclass. כך נוצרים קלאס Person וקובץ Extension נפרד. בקלאס אפשר להוסיף קוד משלנו, כמו description, תכונה מחושבת fullName ו-convenience init. את ה-Extension לא נוגעים כי הוא ייווצר מחדש.
7. קלאס Database משותף: מעבירים אליו את קוד Core Data מה-AppDelegate והופכים אותו ל-singleton עם shared ובנאי private. הוא שייך לקבוצת ה-Models ולא ל-View Controllers, כדי לשמור על MVC.
8. ממשק משתמש: Table View Controller בתוך Navigation Controller, ומסך נפרד להוספה ולעריכה. אם מועבר אליו Person המסך במצב עריכה, ואם הערך ריק הוא במצב הוספה. התא מציג תאריך עם DateFormatter ביחסי זמן (למשל "היום"), וה-gender מוצג כ-male או female.
9. מחיקה: ב-commit editingStyle מוחקים עם context.delete, שומרים ומסירים את הפריט מהמערך.
10. Fetched Results Controller: במקום מערך וטעינה מחדש של כל הטבלה, משתמשים בו כדי לקבל רק את השינויים. זה משתלם בעיקר בטבלאות גדולות. מגדירים אותו כ-lazy var עם request ו-sort descriptors, מפעילים performFetch וממשים את ה-delegate עבור insert, update, move ו-delete.
פקודות והגדרות
- persistentContainer.viewContext הוא ה-Context של האפליקציה.
- NSSortDescriptor לפי lastName ואז firstName ממיין את התוצאות מראש.
- tableView.beginUpdates() ו-endUpdates() עוטפים את העדכונים הפרטניים.
- בעדכון תא משתמשים ב-insertRows, deleteRows ו-moveRow.
טעויות נפוצות
- שם הישות והמפתחות ב-setValue חייבים להיות זהים לכתוב ב-Data Model.
- כותבים Date ולא Data.
- כשמשנים את ה-Codegen צריך לנתק זמנית את הישות מהפרויקט ולבנות, אחרת Xcode לא מזהה את הקלאס.
- ה-Fetched Results Controller מעדכן את הטבלה לפני שהיא מוצגת, ו-iOS מזהירה על כך. המרצה בודק אם tableView.window הוא nil כפתרון, אך באפליקציה הזו האזהרה לא משפיעה.
- CloudKit לא מומלץ בשלב הזה, כי לדברי המרצה הוא עדיין לא אמין מספיק.
בסוף השיעור אפשר להוסיף, לערוך, למחוק ולהציג אובייקטים ב-Core Data, ולהחליט מתי כדאי להשתמש במערך ומתי ב-Fetched Results Controller.
השיעור הבא בקורס: הסבר על Firebase Auth - יצירת משתמשים והתחברות לאפלקציה

פרקי ההרצאה: דטה בייס מקומי לאפליקציה תוך שימוש במערכת CoreData

  1. 00:00

    מה זה Core Data

  2. 01:49

    Data Model וישויות

  3. 02:47

    אובייקטים מנוהלים וקונטקסט

  4. 03:58

    שמירה ואחזור עם Fetch Request

  5. 05:58

    פרויקט חדש עם Use Core Data

  6. 07:16

    הגדרת הישות Person ותכונותיה

  7. 10:17

    ה-App Delegate ומחזור חיי האפליקציה

  8. 13:35

    ה-Core Data Stack בקוד

תמלול ההרצאה: דטה בייס מקומי לאפליקציה תוך שימוש במערכת CoreData

הטקסט המלא של הדקות הראשונות בהרצאה «דטה בייס מקומי לאפליקציה תוך שימוש במערכת CoreData» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    שלום אורחים הבאים אנחנו רוצים להכיר את core data שהיא מערכת לשמירת מידע בטלפון המקומי של המשתמש בדומה לדאטאבייסים. אלא שלעומת דאטאבייס core data היא למעשה מערכת לניהול אובייקטים ולכן היא יותר נוחה מאשר שימוש בדאטאבייס בשימוש בדאטאבייס אנחנו נאלצים להכיר מושגים כמו טבלאות ומושגים

  2. 00:25

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

  3. 00:41

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

  4. 00:48

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

  5. 01:00

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

  6. 01:13

    בנוסף, המערכת היא מאוד מאוד יעילה והיא מאוד נוחה ומודרנית, אז אנחנו נרצה להשתמש בה ולא להשתמש באלטרנטיבות שהן יותר Low-Level, לדוגמה SQLite.

  7. 01:24

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

  8. 01:37

    אז core data בעצם מגשרת לנו על הפער של לייצר דאטאבייס. אם עבדתם בעבר מול דאטאבייסים אז אתם יודעים שיש לכם בעצם כל מיני מושגים שאתם צריכים להכיר שהם רלוונטיים לדאטאבייסים בלבד.

  9. 01:49

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

  10. 02:15

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

  11. 02:37

    הדברים שאתם רוצים לשמור תלויה רק בכם אז מושג ראשון הדאטה מודל מושגים נוספים אובייקטים אמרתי אובייקטים מנוהלים מי מנהל את האובייקטים core data נכון עכשיו איך core data מנהלת את האובייקטים core data מה נקרא לנו קודם כל קלאס שנקרא NSManagedObject וזה הקלאס של האובייקט המנוהל.

  12. 03:01

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

  13. 03:19

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

  14. 03:30

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

  15. 03:45

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

  16. 04:03

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

  17. 04:13

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

  18. 04:30

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

  19. 04:40

    דבר אחרון, כשמאחזרים מידע, אז אנחנו בעצם מייצרים הופעה של NS Fetch Request ואת הבקשה, זה בעצם בקשה לשאילתא של החזור מידע, ואת הבקשה לשאילתה לחזור מידע אנחנו פשוט נרצה אחר כך להריץ מול הקונטקסט.

  20. 04:56

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

  21. 05:16

    אוי, עוד דבר אחד אחרון, קמפלייט של core data אנחנו עושים שימוש ב-app delegate וה-app delegate הוא בעצם אובייקט משותף לכל אפליקציות של iOS אז לכן היה נוח לאפל להשתמש בו בגלל שזה אובייקט משותף למעשה כמו סינגלטון שמשותף ואפשר להגיע אליו מכל מקום באפליקציה אז בפרויקט הזה אנחנו גם נרצה ללמוד

  22. 05:42

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

  23. 06:03

    ו-אפליקיישן, אבל אנחנו רוצים להוסיף את ה-V הזה של Use Core Data. Use Core Data נקרא לפרויקט שלנו Core Data Demos, אוקיי, וכאן אנחנו בעצם נרצה ללמוד על Core Data ואנחנו נעשה Next.

  24. 06:22

    היה חשוב לצמן את ה-Use Core Data. למקרה שאתם שואלים את עצמכם, אז CloudKit היא בעצם מערכת נוספת של אפל שמאפשרת לכם לשמור את המידע הזה גם בענן לצערי המערכת הזאת לא מושלמת עד הסוף ויש איתה המון המון דיליים בתאנה של המידע וכן הלאה ולכן אני לא ממש ממליץ לכם לעשות use cloud kit ולהשתמש ב-cloud kit

  25. 06:45

    זה נכנס רק בגרסה האחרונה של iOS וזה עדיין קצת מקרטע זה לא עובד יפה כמו דאטה בייסים אחרים אז אנחנו נרצה להכיר דאטה בייסים בענן אבל עם כל הכבוד לאפל בשלב הזה אני לא אמליץ על cloud kit לצערי והייתי מאוד שמח כן להמליץ, כי זה מאוד מאוד פשוט להשתמש ב-CloudKit, אבל כמו שאמרתי, זה לא אמין מספיק כדי שאני

  26. 07:06

    אוכל להמליץ לכם על זה. אז רק use core data. טוב. אז יצרנו פרויקט, נכון? מה חדש בפרויקט הזה? למה עשינו את ה-checkbooks על use core data?

  27. 07:22

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

  28. 07:35

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

  29. 07:57

    נקרא לזה פרסון, ועכשיו אנחנו ניגש לתכונות של פרסון. אז אני עושה פה פשוט פלוס ונגיד שלפרסון החלטנו שיהיה first name, הוא יהיה סטרינג, אז הטיפוס שלו יהיה סטרינג ואותו דבר אנחנו נרצה להגדיר נניח גם last name וגם זה יהיה סטרינג בוא נגדיר לנו איזושהי תכונה של תאריך

  30. 08:25

    created at והדבר הזה יכול להיות תאריך ואנחנו יכולים להגדיר נגיד גם גיל הפרסון למרות שזה עדיף שזה יהיה נגזרת של התאריך אז בואו לא נעשה את הדבר הזה אוקיי ניצור כאן אלה התכונות של פרסון שאנחנו רוצים אולי נוסיף ג'נדר שזה יהיה בוליאני כדי שנראה עוד דברים אז אני מגדיר את ג'נדר להיות בוליאן טוב עכשיו כל התכונות האלה יכולות להיות אופצ'ונל או

  31. 08:58

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

  32. 09:15

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

  33. 09:42

    לאקס קוד שלא תייצר לנו שום קוד וואטסווייבר אז אני אומר פה manual/none ואנחנו נעשה שלוש חלקים לסרטון הזה בעצם ואנחנו נראה את כל השלוש אפשרויות של מה זה קלאס דפינישן ומה זה מניואל אז ככה אתם תבינו את זה יותר מאוחר בהמשך.

  34. 10:03

    כרגע אני אומר ל-Xcode אל תייצרי בשבילי בבקשה קלאס של פרסון, כי אנחנו רוצים יותר לראות איך Core Data בנויה מאחורי הקלעים, בהמשך אנחנו גם נייצר קלאס של פרסון.

  35. 10:16

    טוב, עכשיו אמרתי לכם ש-Core Data לא רק נותנת לנו את ה-XData מודל, אלא Core Data משתמשת ב-AppDelegate, אז זה זמן טוב לדבר על AppDelegate.

  36. 10:26

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

  37. 10:42

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

  38. 10:59

    בוא נרשום לעצמנו הערה code that runs when the app starts. אוקיי נכבד לדעת עכשיו באותו אופן אז יש לנו עוד מתודות של Lifecycle של האפליקציה למשל האפליקציה יכולה לפתוח דרך אגב סצנות כי אפליקציה יכולה להיות מוצגת כמה פעמים באותו טלפון ואנחנו לא מאפשרים את זה אז מבחינתנו זה קצת פחות רלוונטי אבל רק שתדעו שיש אפשרות ב-iOS להציג את אותה אפליקציה שלוש אינסטנסים של אותה אפליקציה

  39. 11:31

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

  40. 11:52

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

  41. 12:11

    איזושהי פונקציה נקרא לה PeopleDemo או PersonDemo ואני טוען שאפשר להגיע למתודה הזאת מכל ViewController. We can, נגיד, invoke this method from everywhere in our app.

  42. 12:31

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

  43. 12:43

    אז בואו נגיד שאיך שהאפליקציה נטענה אנחנו נפעיל את הפונקציה שכתבנו עכשיו peopleDemo ואתם יודעים מה בואו נעשה פה פרינט שנדע שהאפליקציה שלנו התחילה app started ונריץ את זה מה שאמרתי עכשיו לגבי app delegate תמיד היה נכון לגבי כל דבר ב-iOS אלא שעד עכשיו לא ממש הזדקקנו ל-app delegate אז לא ראינו אותו אבל עכשיו אנחנו רוצים להסתכל עליו

  44. 13:10

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

  45. 13:20

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

  46. 13:34

    יפה. עכשיו, מה נוסף פה על ידי core data? כי הקובץ הזה היה כל הזמן. אם תפתחו פרויקט קודם שלכם, אתם תראו שהיה לכם tab delegate והיה את הפונקציה did finish launching with options למה אמרתי ש-Xcode משתמשת ב-abdelegate?

  47. 13:51

    בואו נראה איפה אז כאן למטה יש לנו מרק של core data stack היתרון של המרק הזה זה שברגע שאתם כותבים הערה כזאת עם מרק נקודתיים זה שיש לכם פה בקובץ למעלה אפשרות לנווט ולראות את המרקים שלכם אז כאן כתוב ui session lifecycle וכאן כתוב core data stack שזה בדיוק ההערה הזו אבל אני יכול לנווט להערות שלי.

  48. 14:15

    אז הם הוסיפו לנו מרק של core data stack, בעצם כאן מה שהקוד הזה עושה, הוא טוען את הקובץ אקסידאט מודל, שקוראים לו core data demo, זה השם של הקובץ, הוא פשוט טוען את הקובץ ובודק אם יש שגיאות אז הוא מקריס את האפליקציה, אם אין שגיאות אז הוא טוען את הקונטיינר, ועל הקונטיינר הזה למעשה נמצא הקונטקסט.

לקורס המלא: קורס פיתוח אפליקציות לאייפון

ההרצאה הקודמת: פרוייקט מסכם ב-Xcode

ההרצאה הבאה: הסבר על Firebase Auth - יצירת משתמשים והתחברות לאפלקציה

הרצאות קשורות מקורסים אחרים

  • הוספת עברית לאפליקציה
  • מציאת תקלות במערכת נבדקת
  • איך לדווח תקלה במערכת ג'ירה - Jira
  • שימוש ב-useEffect - חלק 1

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון