Re: EOCustomObject valueForKey avoiding infinite recursion
Re: EOCustomObject valueForKey avoiding infinite recursion
- Subject: Re: EOCustomObject valueForKey avoiding infinite recursion
- From: Chuck Hill <email@hidden>
- Date: Thu, 11 Sep 2014 21:54:21 +0000
- Thread-topic: EOCustomObject valueForKey avoiding infinite recursion
That might not give you what you want. committedSnapshot is set when the object is first mutated. If you if the value is changed like:
null -> B -> null
Then this won’t log what is desired.
Chuck
On 2014-09-11, 12:28 PM, "Theodore Petrosky" wrote:
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@hidden> 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@hidden> wrote:
On Thu, 11 Sep 2014 14:55:16 +0100
John Pollard <email@hidden> 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@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
_______________________________________________
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
|
_______________________________________________
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