RE: NSDictionary & KVC problem
RE: NSDictionary & KVC problem
- Subject: RE: NSDictionary & KVC problem
- From: <email@hidden>
- Date: Mon, 25 Oct 2004 09:17:12 +0200
- Thread-topic: NSDictionary & KVC problem
You forgot to cast the retun value of valueForKey() into an NSArray. You are thus using the NSDictionary(Object, Object) constructor. Java is that stupid.
All the same you are using the NSArray(Object) constructor rather than the NSArry(NSArray) constructor.
Pierre
-----Original Message-----
From: webobjects-dev-bounces+pierre.bernard=email@hidden
[mailto:webobjects-dev-bounces+pierre.bernard=email@hidden]On
Behalf Of Nathan Dumar
Sent: Monday, October 25, 2004 12:43 AM
To: Ben Ketteridge
Cc: WebObjects List
Subject: Re: NSDictionary & KVC problem
Ah hah! I think you're right, that it's making a dictionary of one key
and one value, each an array of the keys and values. I was following
the docs:
public NSDictionary(NSArray objects,
NSArray keys)
Creates an NSDictionary with entries from the contents of the keys and
objects NSArrays. This method steps through objects and keys, creating
entries in the new dictionary as it goes. Each key object and its
corresponding value object is added directly to the dictionary.
So why did it not do that?
Here's my code:
prefs = new NSDictionary(thisUser.preferences().valueForKey("value"),
thisUser.preferences().valueForKey("name"));
or equally (I tried both):
NSArray values = new
NSArray(thisUser.family().preferences().valueForKey("value"));
NSArray names = new
NSArray(thisUser.family().preferences().valueForKey("name"));
prefs = new NSDictionary(values, names);
Thanks,
Nathan
On Oct 24, 2004, at 5:13 AM, Ben Ketteridge wrote:
> On Sat, 23 Oct 2004 20:27:11 -0400, Nathan Dumar
> <email@hidden> wrote:
>> I have an NSDictionary called "prefs." I've loaded it with pairs of
>> strings, as follows:
>>
>> prefs.allKeys() yields (("idNum", "uF1", "archiveTo", "uF2", "uF3",
>> "histLimit"))
>>
>> prefs.allValues() yields (("numOnly", "Field 1", "", "Field 2", "Field
>> 3", "8"))
>>
>> So, when I do prefs.valueForKey("uF1") I should get "Field 1", but I
>> don't. I get null. In fact, I get null for any of the keys. When
>> bound to a WOString (value = prefs.uF1) it's the same problem. What >> am
>> I doing wrong?
>
> Are the (( an artifact of the way you've presented the data in your
> email, or are they part of what toString outputs?
>
> If the former, I don't know what you've done wrong, but if it's the
> latter, it would appear there is only one key in the dictionary, and
> that is the array ("idNum", "uF1", "archiveTo", "uF2", "uF3",
> "histLimit") and there is one value in the dictionary, and that is the
> array ("numOnly", "Field 1", "", "Field 2", "Field 3", "8").
>
> Creating the NSDictionary can be done like this:
> NSDictionary dict = new NSDictionary(new Object[] {
> "idNum", "uF1", "archiveTo", "uF2", "uF3", "histLimit"
> }, new Object[] {
> "numOnly", "Field 1", "", "Field 2", "Field 3", "8"
> });
>
> try this and see if dict.valueForKey("uF1") still gives null.
>
> HTH,
> Ben
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
**********************************************************************
This email and any files transmitted with it are intended solely for
the use of the individual or entity to whom they are addressed.
If you have received this email in error please notify the sender
of this message. (email@hidden)
This email message has been checked for the presence of computer
viruses; however this protection does not ensure this message is
virus free.
Banque centrale du Luxembourg; Tel ++352-4774-1; http://www.bcl.lu
**********************************************************************
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden