I have used the 

@Override
        public void willUpdate() {

)    method

then I get the original value and compare it

if (committedSnapshotValueForKey(PROJECT_DESCRIPTION_KEY) != 
NSKeyValueCoding.NullValue) {
                        
setOldPD((String)committedSnapshotValueForKey(PROJECT_DESCRIPTION_KEY));
                        
}

and in your case check for == NSKeyValueCoding.NullValue

does that do what you want?

Ted


On Sep 11, 2014, at 3:20 PM, John Pollard <[email protected]> wrote:

> Ray,
> 
> Thanks for the thought. I do want to log the stack trace but as I can't 
> predict when this issue might happen and it is rare. I want to narrow down to 
> the close circumstances first, or else I will be logging thousands of these 
> stack traces in normal operation when there isn't a problem. What I need to 
> do is detect when a given attribute is changed from non-null to null (which 
> should never happen), so I need to check what it was before it is being set 
> i.e. just check it was non-null before being set to null.
> 
> John
> 
> On 11 Sep 2014, at 18:05, Ray Kiddy <[email protected]> wrote:
> 
>> On Thu, 11 Sep 2014 14:55:16 +0100
>> John Pollard <[email protected]> wrote:
>> 
>>> Hi List,
>>> 
>>> In some debugging within takeValueForKey() I want to find out if the
>>> key already has a value set. If I call valueForKey() or
>>> storedValueForKey() and the value isn't already set I get infinite
>>> recursion as it triggers a fault and tries to load with
>>> takeValueForKey() and so on.
>>> 
>>> I am trying to debug where a value is being set to null, but
>>> apparently not going via validateXXX() or setXXX() methods, so I want
>>> to trap the case where the takeValueForKey() is passed null when the
>>> key value was previously non-null and log a stack trace.
>>> 
>>> Thanks
>>> John
>> 
>> One way to prevent the recursion you are talking about is to actually
>> look at the stack trace inside the method. Call the static method in
>> Wonder, ERXUtilities.stackTrace(), and look at what is in it. If you
>> find the method you are in, you have already been called.
>> 
>> Without Wonder, you can instantiate a Throwable and get the stack trace
>> from that.
>> 
>> Doing this is a smell. You do not want to leave this in your code. 
>> 
>> But since you are putting this in to find something, having this check
>> there temporarily can be useful.
>> 
>> - ray
>> 
>> 
>> 
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/webobjects-dev/john%40pollardweb.com
>> 
>> This email sent to [email protected]
> 
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/tedpet5%40yahoo.com
> 
> This email sent to [email protected]

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

This email sent to [email protected]

Reply via email to