summaryrefslogtreecommitdiffstats
path: root/Classes/Source/Experimental/CJSONDeserializer_BlocksExtensions.m
diff options
context:
space:
mode:
Diffstat (limited to 'Classes/Source/Experimental/CJSONDeserializer_BlocksExtensions.m')
-rw-r--r--Classes/Source/Experimental/CJSONDeserializer_BlocksExtensions.m63
1 files changed, 63 insertions, 0 deletions
diff --git a/Classes/Source/Experimental/CJSONDeserializer_BlocksExtensions.m b/Classes/Source/Experimental/CJSONDeserializer_BlocksExtensions.m
new file mode 100644
index 0000000..7ea774c
--- /dev/null
+++ b/Classes/Source/Experimental/CJSONDeserializer_BlocksExtensions.m
@@ -0,0 +1,63 @@
+//
+// CJSONDeserializer_BlocksExtensions.m
+// TouchJSON
+//
+// Created by Jonathan Wight on 10/15/10.
+// Copyright 2010 toxicsoftware.com. All rights reserved.
+//
+
+#import "CJSONDeserializer_BlocksExtensions.h"
+
+#import "CJSONScanner.h"
+
+@implementation CJSONDeserializer (CJSONDeserializer_BlocksExtensions)
+
+- (void)deserializeAsDictionary:(NSData *)inData completionBlock:(void (^)(id result, NSError *error))block {
+
+ NSError *noDataError = nil;
+ if (inData == NULL || [inData length] == 0) {
+ noDataError = [NSError errorWithDomain:kJSONDeserializerErrorDomain code:kJSONScannerErrorCode_NothingToScan userInfo:NULL];
+ block(nil, noDataError);
+ }
+
+ [[NSOperationQueue mainQueue] addOperationWithBlock:^{
+
+ NSError *deserializationError = nil;
+ self.scanner.data = inData;
+ NSDictionary *theDictionary = NULL;
+ BOOL successful = [self.scanner scanJSONDictionary:&theDictionary error:&deserializationError];
+
+ dispatch_async(dispatch_get_main_queue (), ^{
+ if (successful)
+ block(theDictionary, nil);
+ else
+ block(nil, deserializationError);
+ });
+ }];
+}
+
+- (void)deserializeAsArray:(NSData *)inData completionBlock:(void (^)(id result, NSError *error))block {
+
+ NSError *nullInDataError = nil;
+ if (inData == NULL || [inData length] == 0) {
+ nullInDataError = [NSError errorWithDomain:kJSONDeserializerErrorDomain code:kJSONScannerErrorCode_NothingToScan userInfo:NULL];
+ block(nil, nullInDataError);
+ }
+
+ [[NSOperationQueue mainQueue] addOperationWithBlock:^{
+
+ NSError *deserializationError = nil;
+ self.scanner.data = inData;
+ NSArray *theArray = NULL;
+ BOOL successful = [self.scanner scanJSONArray:&theArray error:&deserializationError];
+
+ dispatch_async(dispatch_get_main_queue(), ^{
+ if (successful)
+ block(theArray, nil);
+ else
+ block(nil, deserializationError);
+ });
+ }];
+}
+
+@end