ios - How to avoid accidental invocation on UIKit's private classes? -



ios - How to avoid accidental invocation on UIKit's private classes? -

i have encountered weird problem. in current project working complex views , doing modifications on fly.

e.g. if view responds settextcolor setting new color using next code

if ([view respondstoselector:propertyselector]) { // invoke method. }

accidentally calling method returned uibuttonlabel (which private hidden class in uikit), , executed above method. in above code uibuttonlabel responded settextcolor: application crashed in invocation.

how avoid accidental access , invocation on uikit's private classes ?

yes can traverse reverse superclasses chain starting nsobject class, checking method not part of class_copymethodlist inspected class , it's metaclass (for class methods). while doing so, check inspected class not coming [nsbundle mainbundle] ([nsbundle bundleforclass:]) does, can terminate search - reached code. but, can imagine, caching it's really slow way of doing things.

you improve of redesigning code: seek using conformstoprotocol: instead of respondstoselector. illustration declare protocol

@protocol xyzsettablecolor <nsobject> @required - (void)setsomethingwithcolor:(uicolor *)textcolor; @end

then, in class (classes) want declare conforms protocol (and implement required methods)

@interface xyzmycontrol : uicontrol <xyzsettablecolor> @end

then later, when want create sure passed component qualified execute specified method:

- (void)applytextcolor:(uicolor *)color tocontrol:(id)control { if ([control conformstoprotocol:@protocol(xyzsettablecolor)]) { [(id<xyzsettablecolor>)control setsomethingwithcolor:color]; } }

ios uiview uikit private-methods

Comments

Popular posts from this blog

php - Android app custom user registration and login with cookie using facebook sdk -

c# - Create a Notification Object (Email or Page) At Run Time -- Dependency Injection or Factory -

Set Up Of Common Name Of SSL Certificate To Protect Plesk Panel -