To answer my own question, changing the enum to an NSInteger backed NS_Enum
resulted in no more bad access exceptions from other chunks of code attempting
to change the APP_State property.
typedef NS_ENUM(NSInteger, APP_State) {
APP_State_Normal = 0,
APP_State_Expired = 1,
APP_State_Waiting = 2
};
Changing the atomicity of the exposed property had no effect on whether the
exception was issued or not.
Hope this helps someone.
Alex Zavatone
On Apr 7, 2015, at 10:04 AM, Alex Zavatone wrote:
> 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/zav%40mac.com
>
> This email sent to [email protected]
_______________________________________________
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]