Home Reference Source Repository

js/Foundation/NSDictionary.js

  1. 'use strict'
  2.  
  3. import NSObject from '../ObjectiveC/NSObject'
  4.  
  5. /**
  6. * dummy class for NSKeyedArchiver/Unarchiver
  7. * @access public
  8. * @extends {NSObject}
  9. */
  10. export default class NSDictionary extends NSObject {
  11. /**
  12. * @access public
  13. * @param {NSCoder} coder -
  14. * @returns {Object} -
  15. */
  16. static initWithCoder(coder) {
  17. const dict = {}
  18. if(typeof coder._refObj['NS.objects'] !== 'undefined'){
  19. const keys = coder._refObj['NS.keys']
  20. const objects = coder._refObj['NS.objects']
  21. if(!Array.isArray(keys)){
  22. throw new Error('NS.keys must be Array')
  23. }
  24. if(!Array.isArray(objects)){
  25. throw new Error('NS.objects must be Array')
  26. }
  27. if(keys.length !== objects.length){
  28. throw new Error('NS.keys.length !== NS.objects.length')
  29. }
  30.  
  31. const keyCoder = coder.copy()
  32. keyCoder._refObj = keys
  33.  
  34. const objCoder = coder.copy()
  35. objCoder._refObj = objects
  36.  
  37. for(let i=0; i<keys.length; i++){
  38. const key = keyCoder.decodeObjectForKey(i)
  39. const obj = objCoder.decodeObjectForKey(i)
  40. dict[key] = obj
  41. }
  42. }else{
  43. for(let i=0; ; i++){
  44. const objKey = `NS.object.${i}`
  45. const keyKey = `NS.key.${i}`
  46. if(typeof coder._refObj[objKey] === 'undefined'){
  47. break
  48. }
  49. const key = coder.decodeObjectForKey(keyKey)
  50. const obj = coder.decodeObjectForKey(objKey)
  51. dict[key] = obj
  52. }
  53. }
  54.  
  55. return dict
  56. }
  57. }