diff options
Diffstat (limited to 'Classes/Source/Experimental/CJSONDeserializer_BlocksExtensions.m')
-rw-r--r-- | Classes/Source/Experimental/CJSONDeserializer_BlocksExtensions.m | 63 |
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 |