ios - Under what conditions might instancesRespondToSelector: return true, but performSelector: throw an exception -
i have code distributed in library looks this:
if ([[nsstring class] instancesrespondtoselector: @selector(jsonvalue)]) { nsstring *jsonstring = [[[nsstring alloc] initwithdata: jsondata encoding: nsutf8stringencoding] autorelease]; dict = [jsonstring performselector: @selector(jsonvalue)]; } for reason -[__nscfstring jsonvalue]: unrecognized selector sent instance exception getting thrown when performselector: method gets called. code distributed in library wrote, can't reproduce or debug myself. instead third-party reporting problem. under conditions instancesrespondtoselector: while calling method using performselector: throw exception?
edit there case explain why occurs, doesn't make sense. if developers this:
@implementation nsstring (ourhappycategory) + (bool)instancesrespondtoselector:(sel)aselector { return yes; } @end it explain why code executing, of course very bad thing do. there way problem occur makes sense?
nsstring class cluster, , brings sorts of complications... need ask instance if responds selector.
nsstring *jsonstring = [[[nsstring alloc] initwithdata: jsondata encoding: nsutf8stringencoding] autorelease]; if ([jsonstring respondstoselector: @selector(jsonvalue)]) { dict = [jsonstring performselector: @selector(jsonvalue)]; } but problem has compiling or linking extension... if category added in library need sprinkle in -objc linker flag.
edit:
have been working little bit on reproducing issue... unable to... have more information.. example failure occurring on simulator, or on device, ios 4.x, gnu linker vs lldb's linker, abi/runtime differences?
Comments
Post a Comment