я код распределяемые в библиотеке, которая выглядит следующим образом:При каких условиях может instancesRespondToSelector: возвращает истину, но performSelector: сгенерирует исключение
if ([[NSString class] instancesRespondToSelector: @selector(JSONValue)]) {
NSString *jsonString = [[[NSString alloc] initWithData: jsonData encoding: NSUTF8StringEncoding] autorelease];
dict = [jsonString performSelector: @selector(JSONValue)];
}
По какой-то причине -[__NSCFString JSONValue]: unrecognized selector sent to instance
исключение становится брошенной, когда метод performSelector:
вызывается. Это код, который распространяется в библиотеке, которую я написал, но я не могу воспроизвести или отладить ее сам. Вместо этого сторонняя сторона сообщает об этой проблеме. При каких условиях может возникнуть instancesRespondToSelector:
при вызове метода с использованием performSelector:
исключение?
Редактировать Существует случай, который мог бы объяснить, почему это происходит, но это не имеет смысла. Если разработчики должны были сделать что-то вроде этого:
@implementation NSString (OurHappyCategory)
+ (BOOL)instancesRespondToSelector:(SEL)aSelector
{
return YES;
}
@end
Это объясняет, почему код выполняется, но она, конечно, будет очень плохо , что нужно сделать. Есть ли способ, которым может возникнуть эта проблема, которая имеет смысл?
Вы уверены, что ваш метод «JSONValue» возвращает словарь? Возможно, это ваша проблема. – Maggie
@Maggie Не имеет значения, что возвращает метод, исключение вызвано * вызовом * методом. Тип возврата для метода 'JSONValue' -' id'. – ThomasW
Вы уверены, что сторонний использует этот код с предложением 'if'? –