Home Reference Source Repository

js/Foundation/NSDictionary.js

'use strict'

import NSObject from '../ObjectiveC/NSObject'

/**
 * dummy class for NSKeyedArchiver/Unarchiver
 * @access public
 * @extends {NSObject}
 */
export default class NSDictionary extends NSObject {
  /**
   * @access public
   * @param {NSCoder} coder -
   * @returns {Object} -
   */
  static initWithCoder(coder) {
    const dict = {}
    if(typeof coder._refObj['NS.objects'] !== 'undefined'){
      const keys = coder._refObj['NS.keys']
      const objects = coder._refObj['NS.objects']
      if(!Array.isArray(keys)){
        throw new Error('NS.keys must be Array')
      }
      if(!Array.isArray(objects)){
        throw new Error('NS.objects must be Array')
      }
      if(keys.length !== objects.length){
        throw new Error('NS.keys.length !== NS.objects.length')
      }

      const keyCoder = coder.copy()
      keyCoder._refObj = keys

      const objCoder = coder.copy()
      objCoder._refObj = objects

      for(let i=0; i<keys.length; i++){
        const key = keyCoder.decodeObjectForKey(i)
        const obj = objCoder.decodeObjectForKey(i)
        dict[key] = obj
      }
    }else{
      for(let i=0; ; i++){
        const objKey = `NS.object.${i}`
        const keyKey = `NS.key.${i}`
        if(typeof coder._refObj[objKey] === 'undefined'){
          break
        }
        const key = coder.decodeObjectForKey(keyKey)
        const obj = coder.decodeObjectForKey(objKey)
        dict[key] = obj
      }
    }

    return dict
  }
}