Skip to content

Commit 9df0746

Browse files
authored
Fix loading of array args from cache (#426)
* Fix loading of array args from cache
1 parent a3a106d commit 9df0746

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

Leanplum-SDK/Classes/Features/Variables/LPVarCache.m

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -318,14 +318,35 @@ - (id)mergeHelper:(id)vars withDiffs:(id)diff
318318
for (id var in vars) {
319319
[merged addObject:var];
320320
}
321-
for (id varSubscript in diff) {
322-
int subscript = [[varSubscript substringWithRange:NSMakeRange(1, [varSubscript length] - 2)] intValue];
323-
id var = [diff objectForKey:varSubscript];
324-
while (subscript >= [merged count]) {
325-
[merged addObject:[NSNull null]];
321+
322+
// Merge values from server
323+
// Array values from server come as Dictionary
324+
// Example:
325+
// string[] items = new string[] { "Item 1", "Item 2"};
326+
// args.With<string[]>("Items", items); // Action Context arg value
327+
// "vars": {
328+
// "Items": {
329+
// "[1]": "Item 222", // Modified value from server
330+
// "[0]": "Item 111" // Modified value from server
331+
// }
332+
// }
333+
// Prevent crashing when loading variable diffs where the diff is an Array and not Dictionary
334+
if ([diff isKindOfClass:NSDictionary.class]) {
335+
for (id varSubscript in diff) {
336+
// Get the index from the string key: "[0]" -> 0
337+
if ([varSubscript isKindOfClass:NSString.class]) {
338+
NSString *varSubscriptStr = (NSString*)varSubscript;
339+
if ([varSubscriptStr length] > 2 && [varSubscriptStr hasPrefix:@"["] && [varSubscriptStr hasSuffix:@"]"]) {
340+
int subscript = [[varSubscriptStr substringWithRange:NSMakeRange(1, [varSubscriptStr length] - 2)] intValue];
341+
id var = [diff objectForKey:varSubscriptStr];
342+
while (subscript >= [merged count]) {
343+
[merged addObject:[NSNull null]];
344+
}
345+
[merged replaceObjectAtIndex:subscript
346+
withObject:[self mergeHelper:merged[subscript] withDiffs:var]];
347+
}
348+
}
326349
}
327-
[merged replaceObjectAtIndex:subscript
328-
withObject:[self mergeHelper:merged[subscript] withDiffs:var]];
329350
}
330351
return merged;
331352
}

0 commit comments

Comments
 (0)