From e312f63ddc32f05907cf03ba07a8a1fc43d193da Mon Sep 17 00:00:00 2001 From: Erwan DATIN Date: Sat, 21 May 2016 10:50:53 +0200 Subject: [PATCH 1/2] fix JSON.parse error (shared NSUserDefaults) **When `NSUserDefaults` is shared (*via group*) with a widget for instance it can lead to JSON.parse error when value stored by widget is a JS primitive: string or number.** Fix here `userDefaults.get` and `userDefaults.set` for - string - number ```objective-c // in swift let userDefaults = NSUserDefaults(suiteName: "SUITE_NAME") userDefaults?.setObject("a string for this key", forKey:"KEY_NAME") userDefaults?.synchronize() ``` --- UserDefaults.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/UserDefaults.js b/UserDefaults.js index 9340bd8..524b3d0 100644 --- a/UserDefaults.js +++ b/UserDefaults.js @@ -9,7 +9,7 @@ const { const userDefaults = { set: (key, value, suiteName, cb) => { - const jsonValue = JSON.stringify(value) + const jsonValue = typeof data === 'string' || typeof data === 'number' ? data : JSON.stringify(value) return new Promise((resolve, reject) => { UserDefaults.setObject(key, jsonValue, suiteName, (err, data) => { if (err) { @@ -32,7 +32,7 @@ const userDefaults = { cb && cb(error) reject(error) } else { - const result = JSON.parse(data) + const result = typeof data === 'string' || typeof data === 'number' ? data : JSON.parse(data) cb && cb(null, result) resolve(result) } From 85ce5eb1c260f44ef618713a78d2b9bd973b2a62 Mon Sep 17 00:00:00 2001 From: Erwan DATIN Date: Sun, 22 May 2016 09:58:43 +0200 Subject: [PATCH 2/2] Update UserDefaults.js --- UserDefaults.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/UserDefaults.js b/UserDefaults.js index 524b3d0..aa5d1e0 100644 --- a/UserDefaults.js +++ b/UserDefaults.js @@ -9,7 +9,7 @@ const { const userDefaults = { set: (key, value, suiteName, cb) => { - const jsonValue = typeof data === 'string' || typeof data === 'number' ? data : JSON.stringify(value) + const jsonValue = typeof value === 'string' || typeof value === 'number' ? value : JSON.stringify(value) return new Promise((resolve, reject) => { UserDefaults.setObject(key, jsonValue, suiteName, (err, data) => { if (err) {