Here is how I implemented such attribute:
        {
            adaptorValueConversionClassName = 
"er.extensions.foundation.ERXPropertyListSerialization"; 
            adaptorValueConversionMethodName = jsonStringFromPropertyList; 
            allowsNull = Y; 
            columnName = "dictionary"; 
            externalType = VARCHAR2; 
            factoryMethodArgumentType = EOFactoryMethodArgumentIsNSString; 
            name = dictionary; 
            valueClassName = Object; 
            valueFactoryClassName = 
"er.extensions.foundation.ERXPropertyListSerialization"; 
            valueFactoryMethodName = dictionaryForJSONString; 
            valueType = S; 
            width = 4000; 
        }, 

Once the entity generated to a class, you have to change the _TheEntity.java 
file and change the type of the attribute from Object to NSDictionary *1*.

Since there is a problem with mutable object as attribute (maybe there is 
another way to fix it?), you have to consider the attribute as immutable and 
use cover method to a mutable one.

So when you need to deal with an immutable version, do it with 
mutableDictionary().
If you just need to ask contents, simply use dictionary();

Use the following code in TheEntity.java:

        LeanMutableDictionary   _mutableDictionary      = null;

        public LeanMutableDictionary mutableDictionary() {
                if (_mutableDictionary == null) {
                        _mutableDictionary = new LeanMutableDictionary();
                }
                return  _mutableDictionary;
        }


        /**
         * Cover class to ease KVC. This « lean » version remove key when value 
is null or Boolean.false.
         */
        public class LeanMutableDictionary implements NSKeyValueCoding {

                @Override
                public Object valueForKey(final String key) {
                        final NSDictionary dict = userInfoDict();
                        if (dict != null) {
                                return dict.valueForKey(key);
                        }
                        return null;
                }

                @Override
                @SuppressWarnings("unused")
                public void takeValueForKey(final Object val, final String key) 
{
                        NSDictionary dict = userInfoDict();
                        if (dict == null) {
                                dict = NSDictionary.EmptyDictionary;
                        }
                        dict = dict.mutableClone();
                        if (val == null || val.equals(Boolean.FALSE)) {
                                // remove that key from the dictionary
                                dict.remove(key);
                        } else {
                                dict.takeValueForKey(val, key);
                        }
                        setUserInfoDict(dict.immutableClone());
                }
        }


[1]  This is because the type (valueClassName) will be used to find the right 
method (with the type argument) and the method is defined in 
ERXPropertyListSerialization with Object, not NSDictionary.  So you have to 
keep it Object.


-
jfv

Le 2014-03-24 à 17:56, Oscar González <racso...@hotmail.com> a écrit :

> Hi all,
> I need to save a NSDictionary to the DB and then recovery it back. 
> Is there some formatter to do this?
> 
> Saludos,
> 
> Oscar González Pérez
> TECH in AGRO S.A.
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/jean_francois_veillette%40yahoo.ca
> 
> This email sent to jean_francois_veille...@yahoo.ca

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to