diff --git a/AFNetworking/AFJSONUtilities.h b/AFNetworking/AFJSONUtilities.h index 2fb59a8..bc70e07 100644 --- a/AFNetworking/AFJSONUtilities.h +++ b/AFNetworking/AFJSONUtilities.h @@ -43,16 +43,15 @@ static NSData * AFJSONEncode(id object, NSError **error) { [invocation invoke]; [invocation getReturnValue:&data]; - } else if (_SBJSONSelector && [object respondsToSelector:_SBJSONSelector]) { - NSString *JSONString = nil; - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[object methodSignatureForSelector:_SBJSONSelector]]; - invocation.target = object; + } else if (_SBJSONSelector && [NSString instancesRespondToSelector:_SBJSONSelector]) { + // Create a string representation of JSON, to use SBJSON -`JSONValue` category method + NSString *string = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[string methodSignatureForSelector:_SBJSONSelector]]; + invocation.target = string; invocation.selector = _SBJSONSelector; [invocation invoke]; - [invocation getReturnValue:&data]; - - data = [JSONString dataUsingEncoding:NSUTF8StringEncoding]; + [invocation getReturnValue:&JSON]; } else if (_YAJLSelector && [object respondsToSelector:_YAJLSelector]) { @try { NSString *JSONString = nil;