Initial implementation of decoupling specific JSON libraries from AFNetworking, in favor of being able to specify which one to use
This commit is contained in:
parent
8007f0aade
commit
283d9cffea
5 changed files with 104 additions and 31 deletions
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#import "AFHTTPClient.h"
|
#import "AFHTTPClient.h"
|
||||||
#import "AFHTTPRequestOperation.h"
|
#import "AFHTTPRequestOperation.h"
|
||||||
|
#import "AFJSONUtilities.h"
|
||||||
|
|
||||||
#import <Availability.h>
|
#import <Availability.h>
|
||||||
|
|
||||||
|
|
@ -31,8 +32,6 @@
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#import "JSONKit.h"
|
|
||||||
|
|
||||||
static NSString * const kAFMultipartFormLineDelimiter = @"\r\n"; // CRLF
|
static NSString * const kAFMultipartFormLineDelimiter = @"\r\n"; // CRLF
|
||||||
static NSString * const kAFMultipartFormBoundary = @"Boundary+0xAbCdEfGbOuNdArY";
|
static NSString * const kAFMultipartFormBoundary = @"Boundary+0xAbCdEfGbOuNdArY";
|
||||||
|
|
||||||
|
|
@ -108,23 +107,13 @@ static NSString * AFQueryStringFromParameters(NSDictionary *parameters) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static NSString * AFJSONStringFromParameters(NSDictionary *parameters) {
|
static NSString * AFJSONStringFromParameters(NSDictionary *parameters) {
|
||||||
NSString *JSONString = nil;
|
NSError *error = nil;
|
||||||
|
NSData *JSONData = AFJSONEncode(parameters, &error);
|
||||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3 || __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_6
|
if (!error) {
|
||||||
if ([NSJSONSerialization class]) {
|
return [[[NSString alloc] initWithData:JSONData encoding:NSUTF8StringEncoding] autorelease];
|
||||||
NSError *error = nil;
|
|
||||||
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error];
|
|
||||||
if (!error) {
|
|
||||||
JSONString = [[[NSString alloc] initWithData:JSONData encoding:NSUTF8StringEncoding] autorelease];
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
JSONString = [parameters JSONString];
|
return nil;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
JSONString = [parameters JSONString];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return JSONString;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
|
static NSString * AFPropertyListStringFromParameters(NSDictionary *parameters) {
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,7 @@
|
||||||
// THE SOFTWARE.
|
// THE SOFTWARE.
|
||||||
|
|
||||||
#import "AFJSONRequestOperation.h"
|
#import "AFJSONRequestOperation.h"
|
||||||
|
#import "AFJSONUtilities.h"
|
||||||
#include <Availability.h>
|
|
||||||
|
|
||||||
#import "JSONKit.h"
|
|
||||||
|
|
||||||
static dispatch_queue_t af_json_request_operation_processing_queue;
|
static dispatch_queue_t af_json_request_operation_processing_queue;
|
||||||
static dispatch_queue_t json_request_operation_processing_queue() {
|
static dispatch_queue_t json_request_operation_processing_queue() {
|
||||||
|
|
@ -117,16 +114,7 @@ static dispatch_queue_t json_request_operation_processing_queue() {
|
||||||
if ([self.responseData length] == 0) {
|
if ([self.responseData length] == 0) {
|
||||||
self.responseJSON = nil;
|
self.responseJSON = nil;
|
||||||
} else {
|
} else {
|
||||||
|
self.responseJSON = AFJSONDecode(self.responseData, &error);
|
||||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3 || __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_6
|
|
||||||
if ([NSJSONSerialization class]) {
|
|
||||||
self.responseJSON = [NSJSONSerialization JSONObjectWithData:self.responseData options:0 error:&error];
|
|
||||||
} else {
|
|
||||||
self.responseJSON = [[JSONDecoder decoder] objectWithData:self.responseData error:&error];
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
self.responseJSON = [[JSONDecoder decoder] objectWithData:self.responseData error:&error];
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.JSONError = error;
|
self.JSONError = error;
|
||||||
|
|
|
||||||
92
AFNetworking/AFJSONUtilities.h
Normal file
92
AFNetworking/AFJSONUtilities.h
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
// AFJSONUtilities.h
|
||||||
|
//
|
||||||
|
// Copyright (c) 2011 Gowalla (http://gowalla.com/)
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in
|
||||||
|
// all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
// THE SOFTWARE.
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#include <Availability.h>
|
||||||
|
|
||||||
|
#if defined(_AF_USE_JSONKIT)
|
||||||
|
#import "JSONKit.h"
|
||||||
|
#elif defined(_AF_USE_SBJSON)
|
||||||
|
#import "SBJSON.h"
|
||||||
|
|
||||||
|
static SBJsonParser * _SBJSONParser() {
|
||||||
|
static SBJsonParser *_af_SBJSONParser = nil;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
_af_SBJSONParser = [[SBJsonParser alloc] init];
|
||||||
|
});
|
||||||
|
|
||||||
|
return _af_SBJSONParser;
|
||||||
|
}
|
||||||
|
|
||||||
|
static SBJsonWriter * _SBJSONWriter() {
|
||||||
|
static SBJsonWriter *_af_SBJSONWriter = nil;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
_af_SBJSONWriter = [[SBJsonWriter alloc] init];
|
||||||
|
});
|
||||||
|
|
||||||
|
return _af_SBJSONWriter;
|
||||||
|
}
|
||||||
|
#elif defined(_AF_USE_YAJL)
|
||||||
|
#if __IPHONE_OS_VERSION_MIN_REQUIRED
|
||||||
|
#import <YAJL/YAJL.h>
|
||||||
|
#elif __MAC_OS_X_VERSION_MIN_REQUIRED
|
||||||
|
#import <YAJLiOS/YAJL.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static inline NSData * AFJSONEncode(id object, NSError **error) {
|
||||||
|
#if defined(_AF_USE_JSONKIT)
|
||||||
|
return [object JSONData];
|
||||||
|
#elif defined(_AF_USE_SBJSON)
|
||||||
|
SBJsonWriter *writer = _SBJSONWriter();
|
||||||
|
return [writer dataWithObject:object];
|
||||||
|
#elif defined(_AF_USE_YAJL)
|
||||||
|
return [[object yajl_JSONString] dataUsingEncoding:NSUTF8StringEncoding]];
|
||||||
|
#else
|
||||||
|
if ([NSJSONSerialization class]) {
|
||||||
|
return [NSJSONSerialization dataWithJSONObject:object options:0 error:error];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline id AFJSONDecode(NSData *data, NSError **error) {
|
||||||
|
|
||||||
|
#if defined(_AF_USE_JSONKIT)
|
||||||
|
return [[JSONDecoder decoder] objectWithData:data error:error];
|
||||||
|
#elif defined(_AF_USE_SBJSON)
|
||||||
|
SBJsonParser *parser = _SBJsonParser();
|
||||||
|
return [parser objectWithData:data];
|
||||||
|
#elif defined(_AF_USE_YAJL)
|
||||||
|
return [data yajl_JSON];
|
||||||
|
#else
|
||||||
|
if ([NSJSONSerialization class]) {
|
||||||
|
return [NSJSONSerialization JSONObjectWithData:data options:0 error:error];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
@ -29,6 +29,7 @@
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
F8323C901455B4FE00190CCB /* AFJSONUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFJSONUtilities.h; sourceTree = "<group>"; };
|
||||||
F87A159D1444926300318955 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLConnectionOperation.h; sourceTree = "<group>"; };
|
F87A159D1444926300318955 /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLConnectionOperation.h; sourceTree = "<group>"; };
|
||||||
F87A159E1444926300318955 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperation.m; sourceTree = "<group>"; };
|
F87A159E1444926300318955 /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLConnectionOperation.m; sourceTree = "<group>"; };
|
||||||
F87A15A01444926900318955 /* AFXMLRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFXMLRequestOperation.h; sourceTree = "<group>"; };
|
F87A15A01444926900318955 /* AFXMLRequestOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFXMLRequestOperation.h; sourceTree = "<group>"; };
|
||||||
|
|
@ -140,6 +141,7 @@
|
||||||
F897DE70142CFEDC000DDD35 /* AFImageRequestOperation.m */,
|
F897DE70142CFEDC000DDD35 /* AFImageRequestOperation.m */,
|
||||||
F897DE6D142CFEDC000DDD35 /* AFImageCache.h */,
|
F897DE6D142CFEDC000DDD35 /* AFImageCache.h */,
|
||||||
F897DE6E142CFEDC000DDD35 /* AFImageCache.m */,
|
F897DE6E142CFEDC000DDD35 /* AFImageCache.m */,
|
||||||
|
F8323C901455B4FE00190CCB /* AFJSONUtilities.h */,
|
||||||
);
|
);
|
||||||
name = AFNetworking;
|
name = AFNetworking;
|
||||||
path = ../../AFNetworking;
|
path = ../../AFNetworking;
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
F8323C941455C03400190CCB /* AFJSONUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFJSONUtilities.h; path = ../AFNetworking/AFJSONUtilities.h; sourceTree = "<group>"; };
|
||||||
F86E5527143A28F3002B438C /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = ../AFNetworking/AFURLConnectionOperation.h; sourceTree = "<group>"; };
|
F86E5527143A28F3002B438C /* AFURLConnectionOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AFURLConnectionOperation.h; path = ../AFNetworking/AFURLConnectionOperation.h; sourceTree = "<group>"; };
|
||||||
F86E5528143A28F3002B438C /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = ../AFNetworking/AFURLConnectionOperation.m; sourceTree = "<group>"; };
|
F86E5528143A28F3002B438C /* AFURLConnectionOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFURLConnectionOperation.m; path = ../AFNetworking/AFURLConnectionOperation.m; sourceTree = "<group>"; };
|
||||||
F874B5C913E0AA6500B28E3E /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = ../AFNetworking/AFHTTPRequestOperation.m; sourceTree = "<group>"; };
|
F874B5C913E0AA6500B28E3E /* AFHTTPRequestOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AFHTTPRequestOperation.m; path = ../AFNetworking/AFHTTPRequestOperation.m; sourceTree = "<group>"; };
|
||||||
|
|
@ -243,6 +244,7 @@
|
||||||
F874B5D013E0AA6500B28E3E /* UIImageView+AFNetworking.m */,
|
F874B5D013E0AA6500B28E3E /* UIImageView+AFNetworking.m */,
|
||||||
F874B5D513E0AA6500B28E3E /* AFNetworkActivityIndicatorManager.h */,
|
F874B5D513E0AA6500B28E3E /* AFNetworkActivityIndicatorManager.h */,
|
||||||
F874B5CD13E0AA6500B28E3E /* AFNetworkActivityIndicatorManager.m */,
|
F874B5CD13E0AA6500B28E3E /* AFNetworkActivityIndicatorManager.m */,
|
||||||
|
F8323C941455C03400190CCB /* AFJSONUtilities.h */,
|
||||||
);
|
);
|
||||||
name = AFNetworking;
|
name = AFNetworking;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue