概览
数据层是一个存储应用一般信息的字典。
它使用一组标准的键,以便了解该规范的任何一方读取该规范。数据层状态通过其 API 进行更新。例如,应用开头可能如下所示:
{
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 *) | - get: |
| 返回与指定键关联的模型中的对象。 | |
成员函数文档
| - (void) pushValue: | (NSObject *) | value | |
| forKey: | (NSObject *) | 键 | |
将键值对推送到数据层。
这只是一种调用 push:@{key: value} 的便捷方法。
| - (void) push: | (NSDictionary *) | update |
将指定的 update 对象合并到现有数据模型中,并调用所有监听器(在合并后)进行更新。
这适用于字典(或嵌入式数组)中的值的类型 NSNull。如果要表示缺失值(例如列表中的空索引),请使用 kTAGDataLayerObjectNotPresent 对象。
这通常是同步调用。不过,如果当线程正在执行推送时,同一线程又发生了另一个推送,那么第二次推送就是异步的(第二次推送将在对数据层进行更改之前返回)。例如,如果数据层推送是为响应代码触发而进行的,则可以从同一线程进行第二次推送。但是,所有更新都将在最外层的推送返回之前处理。
如果 update 包含 event 键,则系统将对规则求值并触发匹配的代码。
- 参数:
-
update 要处理的更新对象
| - (NSObject*) 获取: | (NSString *) | key |
返回与指定键关联的模型中的对象。
如果键不存在,则返回 nil。如果存在 key,但返回 NSNull,则返回 NSNull。
键中可以包含嵌入句点。例如:键为 "a.b.c" 会返回“c”的值字典中包含键“b”的键包含键“a”的字典模型中。