【发布时间】:2013-04-09 07:34:16
【问题描述】:
我的代码分布在一个如下所示的库中:
if ([[NSString class] instancesRespondToSelector: @selector(JSONValue)]) {
NSString *jsonString = [[[NSString alloc] initWithData: jsonData encoding: NSUTF8StringEncoding] autorelease];
dict = [jsonString performSelector: @selector(JSONValue)];
}
由于某种原因,在调用 performSelector: 方法时会引发 -[__NSCFString JSONValue]: unrecognized selector sent to instance 异常。这是分布在我编写的库中的代码,但我自己无法重现或调试它。相反,第三方正在报告此问题。在什么情况下instancesRespondToSelector: 在实际使用performSelector: 调用方法时会抛出异常?
编辑 有一个案例可以解释为什么会发生这种情况,但这没有意义。如果开发人员要做这样的事情:
@implementation NSString (OurHappyCategory)
+ (BOOL)instancesRespondToSelector:(SEL)aSelector
{
return YES;
}
@end
它会解释为什么代码正在执行,但这当然是非常糟糕的事情。有没有一种合理的方式可以解决这个问题?
【问题讨论】:
-
您确定您的“JSONValue”方法会返回字典吗?也许这是你的问题。
-
@Maggie 不管方法返回什么,异常都是由调用方法引起的。
JSONValue方法的返回类型是id。 -
您确定第三方正在使用此代码,并带有
if子句吗? -
@MarceloFabri 这段代码在我的静态库中,他们包含在他们的应用程序中。我知道异常在那里被抛出,因为我的代码捕获了异常并写了一条特定的消息。
-
您确定这是对
JSONValue的唯一可能调用吗?也许第 3 方没有正确链接您的库并自己调用JSONValue?
标签: ios objective-c exception unrecognized-selector