Hey!
On 16/Sep/2010, at 7:34 AM, ISHIMOTO Ken wrote: Hi all, was a nice WOWODC, and really nice Job done Pascal. Glad to hear that WOWODC was fun... Too bad I missed it. OTOH, I head for Germany this weekend for my first european vacation so that's where my time off is going this year. ;-)
I have a small Problem about NSDictionary. NSArray<Movie> movies= Movie.fetchAllMovies(defaultEditingContext()); EOEnterpriseObject eo = movies.objectAtIndex(0); NSDictionary pDic = EOUtilities.primaryKeyForObject(defaultEditingContext(), eo); System.err.println("1:" + pDic); -->1:{movieID = 102; } System.err.println("isEmpty:" + pDic.isEmpty()); -->isEmpty:true System.err.println("count:" + pDic.count()); -->count:1 Hadn't isEmpty not to be false ?
I tried to reproduce your problem with a non-wonder app and could not. I was able to reproduce it with a Wonder app.
Also looking into isEmpty public boolean isEmpty() { System.err.println("_count : " + _count); -->_count : 0 System.err.println("count() : " + count()); -->count : 1 return _count <= 0; } Why is the result of _count and count() different? Any ideas what's going wrong?
This was the part that really confused me until, I looked at this:System.err.println("pDic.getClass().getName() = " + pDic.getClass().getName()); and I see: pDic.getClass().getName() = com.webobjects.eocontrol._EOMutableKnownKeyDictionary
So, primaryKeyForObject() is returning a private subclass. And that subclass has it's own _count ivar. However it does not have an implementation of isEmpty() so it's inheriting the one from NSDictionary. Now, that's the WONDER version of NSDictionary. And it's using it's own _count ivar. :-(
The fix is to change NSDictionary.java's isEmpty() method to be: public boolean isEmpty() { return count() <= 0; }
For the record, size() should be changed as well! And perhaps others, but I don't have unit tests for NSDictionary so I'm not changing anything! ;-)
Good luck! M.
|