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 (Cocoa-dev@lists.apple.com)

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 arch...@mail-archive.com

Reply via email to