הפניה למחלקה של TAGDataLayer ברמת

הפניה למחלקה של TAGDataLayer ברמת

סקירה כללית

שכבת הנתונים היא מילון שמכיל מידע כללי על האפליקציה.

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

   {
     title: "Original screen title"
   }

כשהמצב/הנתונים של אפליקציה עשויים להשתנות, האפליקציה יכולה לעדכן את ה-dataLayer באמצעות קריאה כמו:

   [dataLayer push:@{@"title": @"New screen title"}];

כעת שכבת הנתונים מכילה:

   {
     title: "New screen title"
   }

לאחר ביצוע דחיפה נוספת:

   [dataLayer push:@{@"xyz": @3}];

ה-dataLayer מכיל:

   {
     "title": "New screen title",
     "xyz": 3
   }

הדוגמה הבאה ממחישה איך פועל מיזוג של מערכים ומפות. אם ה-dataLayer המקורי מכיל:

   {
     "items": @[@"item1", [NSNull null], @"item2", @{@"a": @"aValue", @"b": @"bValue"}]
   }

אחרי הדחיפה הזו:

   [dataLayer push:@{@"items":
       @[[NSNull null], @"item6", kTAGDataLayerObjectNotPresent, @{@"a": [NSNull null]}]}

ה-dataLayer מכיל:

   {
     "items": @[[NSNull null], @"item6", @"item2", @{@"a": [NSNull null], @"b": @"bValue"}]}
   }

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

כשמפתח event מועבר לשכבת הנתונים, הכללים לתגים נבדקים וכל התגים שתואמים לאירוע הזה יופעלו. לדוגמה, בהינתן מאגר עם תג שכללי ההפעלה שלו הם ש-'event' שווה ל-'openScreen', אחרי הדחיפה הזו:

   [dataLayer push:@{@"event", @"openScreen"}];

שהתג יופעל.

פונקציות של חברי ציבור

(void) - pushValue:forKey:
 המדיניות הזו שולחת צמד מפתח/ערך לשכבת הנתונים.
(void) - push:
 ממזג את אובייקט update הנתון עם מודל הנתונים הקיים, ומבצע קריאה לכל המאזינים עם העדכון (לאחר שהמיזוג מתבצע).
(NSObject *)- מקבלים:
 מחזירה את האובייקט במודל המשויך למפתח הנתון.

תיעוד לגבי פונקציות חברים

- (void) pushValue: (NSObject *) ערך
forKey: (NSObject *) מקש

המדיניות הזו שולחת צמד מפתח/ערך לשכבת הנתונים.

זהו רק אמצעי נוח שקורא ל-push:@{key: value}.

- (ביטול) push: (NSDictionary *) עדכון

ממזג את אובייקט update הנתון עם מודל הנתונים הקיים, ומבצע קריאה לכל המאזינים עם העדכון (לאחר שהמיזוג מתבצע).

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

בדרך כלל מדובר בשיחה סנכרונית. עם זאת, אם בזמן שה-thread מבצע את הדחיפה, מתבצעת דחיפה נוספת מאותו שרשור, אז הדחיפה השנייה היא אסינכרונית (הדחיפה השנייה תחזור לפני שיבוצעו שינויים בשכבת הנתונים). הדחיפה השנייה הזו מאותו שרשור יכולה להתרחש, למשל, אם דחיפת שכבת נתונים מתבצעת בתגובה להפעלה של תג. עם זאת, כל העדכונים יעובדו לפני ההחזרה החיצונית ביותר של הדחיפה.

אם update מכיל את המפתח event, הכללים יעברו הערכה ותגים תואמים יופעלו.

פרמטרים:
updateאובייקט העדכון לעיבוד
- (NSObject*) get: (NSString *) מפתח

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

אם המפתח לא נמצא, הפונקציה מחזירה את הערך nil. אם המשתנה key קיים אבל NSNull, הפונקציה מחזירה את הערך NSNull.

במפתח יכולות להיות נקודות מוטמעות. לדוגמה: במילון, המפתח "a.b.c" מחזיר את הערך של המפתח "c" במילון, עם המפתח "b" במילון עם המפתח "a" במודל.