מדד וחקירה
שימוש בנתונים Core לניהול נתונים מקומי יעיל ב Ios
Table of Contents
נתוני הליבה עומדים בתור המסגרת העיקרית של אפל לניהול גרף האובייקט המתמשך ביישומים של iOS. במקום לכפות מפתחים לכתוב SQL או לנהל סידוריזציה קובץ, נתוני הליבה מספקים ממשק מונחה ברמה גבוהה אשר מטפל המורכבות של אחסון, שינוי מעקב ומודל נתונים. כל מפתח iOS עובד עם נתונים מקומיים צריך להבין את יכולות המידע של Core ושיטות הטובות ביותר כדי לבנות יישומים תגובתיים, עשירי נתונים ללא ביצועים להקריב.
הבנה של אדריכלות נתונים Core
נתוני הליבה אינם רק מסד נתונים.זהו מסגרת ניהול גרף אובייקטים שיכולה להימשך נתונים לדיסק, אבל זה גם מנהל מערכות יחסים של אובייקטים בתוך-זיכרון, ניהול לאדו, ואימות.האדריכלות סובבת סביב ארבעה מרכיבים מרכזיים שעובדים יחד כדי ליצור מה שמכונה בדרך כלל FLT:0Core DataערימהFLT:1.
קידוד Core Data Stack
כל יישום נתונים הליבה דורש סט מסוים של אובייקטים הקשורים בסדר מוגדר.
- (FLT:0) מנדנד Object Context (NSManagedObjectcontext): FLT:1 הגרדיאן שבו מפתחים עובדים עם אובייקטים מנוהלים.כל השינויים מתרחשים בתוך ההקשר לפני שהם נשמרים לחנות התמידית.
- (FLT:0) רכז חנות עקבי (NSPersistentStoreCoordinator): חוקי ההרחבה 1 (Simph:1) כגשר בין ההקשר לבין החנות המתמדת בפועל (s) היא מתווך גישה ומבטיחה שלמות נתונים.
- מודל האובייקטים של NSManagedObjectModel:FLT:1 מייחס את הגופים, התכונות והיחסים בschema הנתונים.זה בדרך כלל מוגדר באופן ויזואלי בקובץ .xcdata מדגמים.
- (FLT:0) חנות מושלמת:FLT:1 מנגנון האחסון בפועל, אשר יכול להיות SQLite, בינארי, או in-memory. SQLite הוא ברירת המחדל עבור יישומי ייצור.
פיתוח iOS מודרני לעתים קרובות משתמש בכיתה (FLT:0), אשר יוצר באופן אוטומטי והגדרת כל הערימה.זה מסיר את לוח הרתמה ומפחית את הסיכוי של תצורה שגויה.
הגדרת נתונים מקוריים בפרויקט שלך
הוספת נתוני ליבה לפרויקט iOS דורש מספר שלבים מכוונים, שכל אחד מהם בונה את הבסיס לניהול נתונים.התהליך מתחיל ביצירת קובץ מודל נתונים, ולאחר מכן הגדרת ישויות שלך, ולבסוף לשלב את הערימה עם מחזור החיים של האפליקציה שלך.
יצירת מודל הנתונים
התחל על ידי הוספת קובץ חדש לפרויקט Xcode שלך באמצעות ה- XFLT:0Data ModelFevolver1 תבנית (extension .xcdataמודלd) בעורך החזותי הזה, אתה מגדיר ישויות (שווה ערך לטבלאות), תכונותיהם (columns), ומערכות יחסים לגופים אחרים.You יכול גם לציין סוגים של נתונים, ערכי ברירת מחדל, כללי אימות, ואפשרויות אינדקס כדי להתאים את הביצועים של השאילתה.
הגנה על יחסים ויחסים
כל ישות מייצגת סוג של אובייקט שה- app שלך מנוהל, כגון משתמש, משימה או מוצר. Attributes מגדיר את המאפיינים של ישות זו (שם, מחיר, תאריך וכו ') מערכות יחסים מתחברות, המאפשרות ל- Core נתונים לעקוב אחר גרפים אובייקטים ולהפיץ אוטומטית את המחיקה או עדכונים.לדוגמה, ישות "Person" עשויה להיות מערכת יחסים חד-אדם אחד-ל-אדם ל"טלפון"מספרים", ישויות יכולות להביא נתונים.
בעת תכנון יחסים, שימו לב ל-FLT:0 [החוקה] של הכללה [ה] אפשרויות: אפשרויות כוללות Nullify, Cascade ו- Deny.בחירת הכלל הלא נכון עלולה להוביל לאובדן נתונים בלתי צפוי או רשומות יתומים.
יצירת NSManagedObject Subclasses
לאחר שמודל הישות שלך הושלם, Xcode יכול ליצור באופן אוטומטי כיתות Swift עבור כל ישות.התתתות אלה יורשו מ-FLT:1 וכולל את התכונות והיחסים שהגדירתם. החל מ- Xcode 8, הגישה המומלצת היא לבחור "קוד" כמו FLT:0 Class DefinitionFLT:1 (default), אשר שומרת את הקבצים שנוצרו בתיקיה הנקובת, לחלופין, באפשרותך לבחור "Nual / Manual" ו-ones, ליצור תכונותיך" או סטנדרטיות.
ביצוע פעולות CRUD
עם הערימה במקום, אתה יכול להוסיף, להביא, לעדכן ולמחוק חפצים מנוהלים באמצעות FLT:2 (המבצעים חייבים להתבצע בתוך ההקשר, שינויים נמשכים רק לאחר שיחה מוצלחת של FLT:3).
יצירת והצלת אובייקטים
כדי להוסיף אובייקט חדש, השתמש ב-FLT:4 ולאחר מכן להגדיר את המאפיינים שלו, לאחר כל השינויים, התקשר ל-FLT:5 תמיד לעטוף שיחות לחסום 6 כדי לטפל בשגיאות בחסד, במיוחד במהלך פעולות סודיות למשתמש.
לכידת נתונים עם Predicates ו-Discriptors
(ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
לקום ולעזוב
העלאת חפץ היא פשוטה כמו שינוי התכונות שלה בהקשר; נתוני הליבה עוקבים אחר השינויים באופן אוטומטי. למחוק, לקרוא ל-FLT:13 לזכור להציל את ההקשר לאחר מכן.עבור מחיקת אצווה, להשתמש ב-FLT:14 שפועל ישירות בחנות המתמדת ללא טעינה לזיכרון, שיפור ביצועים דרמטיים.
Best Practices for Production-Ready Core Data
אפילו ערימה של נתונים Core היטב יכול להיות צוואר בקבוק או מקור באגים אם לא מטופל בקפידה.לאחר דפוסים מבוססים מבטיח שהאפליקציית שלך תישאר תגובה, יציבה, וסקאלה.
בטיחות ומטבע
(הופנה מהדף ה-FLT:15 אינו בטוח מראש על ידי ברירת מחדל.לעולם אל תשתף הקשר בין חוטים במקום, השתמש בשיטה של ההרחבה:15 על FLT:16 כדי ליצור תור פרטי עבור פעולות רקע.כאשר גישה לאובייקטים על החוט הראשי, השתמש ב-FLT:17 או FLT 18 כדי להבטיח את המגבלות של חוט.
גרסה וההגירה
ככל שהאפליקציות שלך מתפתחות, מודל הנתונים שלך ישתנה - תכונות קידוד, ישויות renaming, או שינוי מערכות יחסים. Core Data תומך בשני סוגים של הגירה: FLT:0light Weight הגירה הגירה FLT:1 ו-FLT:2 Customer MigrationFLT 3: Light Weight מטפל בשינויים פשוטים (מאפיינים, שינוי, שינוי, שינוי, שינוי, שינוי, תכונות עם מזהה) באופן אוטומטי אם אתה יכול לעבור בדיקה מורכבת של משתמשים.
אופטימיזציה
(הופנה מהדף ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
טעות
כל שינוי, חסך ומבצע יכול להיכשל תמיד את השיחות האלה בלוקים והצגת הודעות שגיאה משמעותיות למשתמש.
מידע על Core עם SwiftUI
SwiftUI מספק תמיכה ראשונה עבור Core נתונים באמצעות עטיפות רכוש וערכים סביבתיים.The [FLT 27 עטיפה] באופן אוטומטי צופה ההקשר הראשי ורענן את הנוף כאשר נתונים משתנים.You יכול להגדיר את סוג המטיפים וההקדמה ישירות בהצהרת הנכס.עבור בקרה גרפית יותר, בהזריקת ההקשר מנוהל לסביבה באמצעות LT:28 כאשר עובדים עם «Ob מוחלש מבט על מודל זה או תיקון עבור רקע כבד, אם יש צורך בתצוגה של מודל זה, אם יש צורך בבדיקה כבדה של מדיניות, אם יש צורך בבדיקה של רקע זה, אם יש צורך בבדיקה כבדה של רקע זה, אם יש צורך בבדיקה של מדיניות, אם יש צורך בבדיקה של מודל @ObObject עבור יישום של רקע זה, אם יש צורך בבדיקה כבדה יותר, אם יש צורך בבדיקה כבדה של רקע זה, אם יש צורך בבדיקה של רקע זה, אם יש צורך בבדיקה של מודל עבור יישום קשר מנוהל על רקע כבד של מדיניות שמירה על רקע זה, אם הוא שמירה על רקע זה, אם הוא מקבל התייחסות כבדה יותר של רקע זה, אם הוא מקבל התייחסות כבדה של רקע זה, אם הוא מקבל התייחסות כבדה של מערכת ניהולי, אם הוא מבצע התייחסות כבדה יותר, אם הוא מקבל התייחסות כבדה יותר, אם הוא מקבל התייחסות כבדה של מערכת
סוויפט גם מפשטת ניהול לא-דו: להגדיר את ה-:29 בהקשר, ו- SwiftUI יתשלב באופן אוטומטי עם מחוות ה- undo/redo של המערכת.
מידע מקורי לעומת אפשרויות אחרות
בעוד ש- Core Data הוא הפתרון הבוגר והשילוב ביותר לאחסון מקומי של iOS, לא תמיד הבחירה הטובה ביותר.שוות אותו עם חלופות:
- (ב) ,0 משתמשים (Defaults: FLT:103) מתאים לכמויות קטנות של העדפות משתמשים, אך לא עבור נתונים מורכבים או גדולים.
- (FLT:0) ריאלם: ⁇ FLT:1 מציע ממשק API פשוט יותר ועדכונים תגובתיים אוטומטיים, אך מוסיף תלות ואינו משלב עמוק עם SwiftUI.
- (FLT:0)Raw SQLiel:FLT:1 נותן שליטה מקסימלית וביצועים עבור נתונים גדולים מאוד או שאילתות מורכבות, אבל דורש ניהול קשרים, הגירה, וחוטף באופן ידני.
- (FLT:0CloudKit + Core Data:FLT:1 for Applications Needing iCloudSync, Apple'sFLT:30 גשרים Core Data ו-CloudKit, מסנכרנים באופן אוטומטי שינויים מקומיים לענן.
עבור רוב יישומי iOS סטנדרטיים הדורשים נתונים, מערכות יחסים וכושר לא מקוון, נתוני הליבה נותר הבחירה המומלצת בשל שילוב חלקה שלה עם הפלטפורמה ותמיכה מתמשכת באפל.
מסקנה
נתוני הליבה מספקים מערכת ניהול גרף אובייקט המפשט את המורכבות של אחסון מתמשך, שינוי מעקב וניהול מערכת יחסים. על ידי הבנת הארכיטקטורה שלה - מההקשר מנוהל לצריף המתמשך - ולאחר שיטות מוכחות עבור concurrency, ביצועים, וטיפול שגיאות, מפתחים יכולים לבנות יישומים שהם גם חזקים ותגובה.אם אתה בונה רשימה פשוטה לביצוע או יישום עסקי בעל ערך נתונים, ניהול נתונים הליבה הוא מיומנות יעילה וניהול נתונים מקומי.
(ב) ב[[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]], [[1924]]]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]]]], [[1924]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]], [[1924]]]]]]]]]], [[1924]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]], [[1924]]]], [[1924]]]]]]]], [[1924]], [[1924]], [[1924]], [[1924]], [[1924]]]], [[1924]]]]]]]], [[1924]], [[1924]], [[1924]], [[1924]]]]]]]], [[1924]]]]]]]], [[[[1924]], [[