private object GetItem(string key)
        {
            NSObject obj = null;

            if (IsRoaming)
            {
                obj = _store.ValueForKey(new NSString(key));
            }
            else
            {
                obj = _defaults.ValueForKey(new NSString(key));
            }
            return(IOSTypeConverter.ConvertToObject(obj));
        }
        private bool DoTryGetValue(string key, out object value)
        {
            NSObject obj = null;

            if (IsRoaming)
            {
                obj = _store.ValueForKey(new NSString(key));
            }
            else
            {
                obj = _defaults.ValueForKey(new NSString(key));
            }

            value = IOSTypeConverter.ConvertToObject(obj);
            return(obj != null);
        }
        private void SetItem(string key, object value)
        {
            if (value == null)
            {
                if (IsRoaming)
                {
                    _store.Remove(key);
                }
                else
                {
                    _defaults.RemoveObject(key);
                }
            }
            else
            {
                TypeCode code = Type.GetTypeCode(value.GetType());
                switch (code)
                {
                case TypeCode.String:
                    if (IsRoaming)
                    {
                        _store.SetString(key, value.ToString());
                    }
                    else
                    {
                        _defaults.SetString(value.ToString(), key);
                    }
                    break;

                case TypeCode.Int32:
                    if (IsRoaming)
                    {
                        _store.SetLong(key, (long)value);
                    }
                    else
                    {
                        _defaults.SetInt((int)value, key);
                    }
                    break;

                case TypeCode.Double:
                    if (IsRoaming)
                    {
                        _store.SetDouble(key, (double)value);
                    }
                    else
                    {
                        _defaults.SetDouble((double)value, key);
                    }
                    break;

                case TypeCode.Single:
                    if (IsRoaming)
                    {
                        _store.SetDouble(key, (double)value);
                    }
                    else
                    {
                        _defaults.SetFloat((float)value, key);
                    }
                    break;

                case TypeCode.Boolean:
                    if (IsRoaming)
                    {
                        _store.SetBool(key, (bool)value);
                    }
                    else
                    {
                        _defaults.SetBool((bool)value, key);
                    }
                    break;

                default:
                    if (IsRoaming)
                    {
                        _store.SetValueForKey(IOSTypeConverter.ConvertToNSObject(value), new NSString(key));
                    }
                    else
                    {
                        _defaults.SetValueForKey(IOSTypeConverter.ConvertToNSObject(value), new NSString(key));
                    }
                    break;
                }
            }
        }
        private void SetItem(string key, object value)
        {
            if (value == null)
            {
                if (IsRoaming)
                {
                    _store.Remove(key);
                }
                else
                {
                    _defaults.RemoveObject(key);
                }
            }
            else
            {
                TypeCode code = Type.GetTypeCode(value.GetType());
                switch (code)
                {
                case TypeCode.String:
                    if (IsRoaming)
                    {
                        _store.SetString(key, value.ToString());
                    }
                    else
                    {
                        _defaults.SetString(value.ToString(), key);
                    }
                    break;

                case TypeCode.Int64:
                    if (IsRoaming)
                    {
                        _store.SetLong(key, (long)value);
                    }
                    else
                    {
                        _defaults.SetInt((nint)value, key);
                    }
                    break;

                case TypeCode.Int32:
                    if (IsRoaming)
                    {
                        _store.SetLong(key, (long)value);
                    }
                    else
                    {
                        _defaults.SetInt((int)value, key);
                    }
                    break;

                case TypeCode.Double:
                    if (IsRoaming)
                    {
                        _store.SetDouble(key, (double)value);
                    }
                    else
                    {
                        _defaults.SetDouble((double)value, key);
                    }
                    break;

                case TypeCode.Single:
                    if (IsRoaming)
                    {
                        _store.SetDouble(key, (double)value);
                    }
                    else
                    {
                        _defaults.SetFloat((float)value, key);
                    }
                    break;

                case TypeCode.Boolean:
                    if (IsRoaming)
                    {
                        _store.SetBool(key, (bool)value);
                    }
                    else
                    {
                        _defaults.SetBool((bool)value, key);
                    }
                    break;

                default:
                    if (IsRoaming)
                    {
                        _store[new NSString(key)] = IOSTypeConverter.ConvertToNSObject(value);
                    }
                    else
                    {
                        _defaults[key] = IOSTypeConverter.ConvertToNSObject(value);
                    }
                    break;
                }
            }

            if (_locality == ApplicationDataLocality.SharedLocal)
            {
                _defaults.Synchronize();
            }
        }