I've read Apple's docs on assuring KVO/KVC compliance, but in this particular
situation, I'd appreciate someone explaining what I'm not getting here if it's
anything obvious.
I think what I'm asking is how to convert code that has a state exposed as a
(nonatomic, readwrite) property of a typedef-ed enum so that it can be observed
by KVO.
The code that I've inherited has an enum (not an NSEnum) that represents the
app's connected state, 0, 1 or 2.
This enum is then typedef-ed and then exposed as a property through @property
(nonatomic, readwrite)
This property is within the AppDelegate and is referred to and set throughout
the app.
enum APP_State {
APP_State_Normal = 0,
APP_State_Expired = 1,
APP_State_Waiting = 2
};
typedef enum APP_State APP_State;
@property (nonatomic, readwrite) APP_State app_idle_state;
So, I want to set up an approach to monitor this state and set a readout
graphic based upon the state's value. I had assumed that KVO would be the path
of least overhead and allow a rather self contained little class to handle this
without any nasty polling.
Within a new class, I added an observer to the APP_State property on the
appDelegate and this operates as expected, but adding the KVO will trigger an
EXC_BAD_ACCESS when attempting to change the app_idle_state enum property
within another class that accesses that property in the delegate.
Specifically, this:
delegate.app_idle_state = APP_State_Waiting;
Results in this:
Thread1: EXC_BAD_ACCESS (code=1,address = 0x003f8f3)
First of all, I've never seen enum being attempted to be exposed like this
(would making this an NS_ENUM help?).
Also, I certainly was expecting *something* to go wrong here, but not causing
bad access exceptions elsewhere when code in another class attempts to set the
value of the property (since its property was set to readwrite).
Changing the property declaration to atomic seems to be more correct in that we
don't want any other operation to happen on it, but that doesn't doesn't affect
whether or not an EXC_BAD_ACCESS.
Or I could be walking down the wrong path entirely and should just poll for the
value or have a notification of a state change be sent to the monitoring class.
Thoughts?
Thanks in advance,
Alex Zavatone
_______________________________________________
Cocoa-dev mailing list ([email protected])
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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]