On Sep 16, 2010, at 10:02 AM, Mark Ritchie wrote:

> 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 int count() {
>>              return _count;
>>      }
>>      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. :-(

Good one!


> 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! ;-)

Yet another reason to never use an ivar outside of the constructor or its 
accessor / mutator methods.

Chuck


-- 
Chuck Hill             Senior Consultant / VP Development

Practical WebObjects - for developers who want to increase their overall 
knowledge of WebObjects or who are trying to solve specific problems.    
http://www.global-village.net/products/practical_webobjects







Attachment: smime.p7s
Description: S/MIME cryptographic signature

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

This email sent to [email protected]

Reply via email to