Question about -awakeAfterusingCoder:
Question about -awakeAfterusingCoder:
- Subject: Question about -awakeAfterusingCoder:
- From: Graham Cox <email@hidden>
- Date: Thu, 15 Apr 2010 11:23:36 +1000
Hi all,
Got a slightly awkward problem I'm trying to find a good solution to.
I have a number of objects forming a class hierarchy where e.g. C subclasses B which subclasses A. A has a 'locked' property which locks it preventing changes to several other properties. B and C add further properties some of which also check 'locked' in their setters and become no-ops if locked is true.
When objects are dearchived, 'locked' is one of the dearchived properties of A. But when B and C properties are subsequently dearchived, if locked was YES, then many of these dearchived properties, which are set through the relevant setters, are ignored. Disaster ensues.
I can see a number of solutions:
A. When checking for locked in a setter, do something like:
if( locked && !currentlyDearchiving )
return;
But that needs lots of changes and some hackery to flag when dearchiving is in progress.
B. For each implementation of -initWithCoder:, save the locked state, set it to NO, dearchive, then restore the saved lock state.
That's slightly better, but still requires that all subclasses remember to do this and is a biggish change to the code. I'd prefer a way to handle this entirely in the base class, A.
So I'm wondering if I can use -awakeAfterUsingCoder:. Is it safe to ask the coder to decode a value at that time? Since it runs after all subclasses have been initedWithCoder, it ought to be the right time to finally set the true state of the lock. I have misgivings however that this is not its intended purpose.
If that's not allowed or would be bad for other reasons, is there a way to defer it somehow, for example by posting a -performAfterDelay on self to set the lock state - that would only run after all dearchiving completed I believe.
Or something else?
--Graham
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden