From 85548a720986c9064cd319a577487288d88374ac Mon Sep 17 00:00:00 2001 From: Giuseppe Nucifora Date: Mon, 8 Feb 2016 14:52:32 +0100 Subject: [PATCH] - Fix Respose Error grab data --- Example/PNObject/PNObjectAppDelegate.m | 7 ---- Example/PNObject/PNObjectViewController.m | 11 +++++- Example/Pods/Pods.xcodeproj/project.pbxproj | 16 +++++++++ PNObject.podspec | 2 +- Pod/Classes/PNClasses/PNUser.m | 4 +-- Pod/Classes/PNObject+PNObjectConnection.m | 34 ++++++++++++------- Pod/Classes/PNObjectConfig.m | 5 ++- .../AFJSONResponseSerializerWithData.h | 15 ++++++++ .../AFJSONResponseSerializerWithData.m | 31 +++++++++++++++++ 9 files changed, 99 insertions(+), 26 deletions(-) create mode 100644 Pod/Classes/Vendors/AFJSONResponseSerializerWithData/AFJSONResponseSerializerWithData.h create mode 100644 Pod/Classes/Vendors/AFJSONResponseSerializerWithData/AFJSONResponseSerializerWithData.m diff --git a/Example/PNObject/PNObjectAppDelegate.m b/Example/PNObject/PNObjectAppDelegate.m index 3bcccf6..e2ef12c 100644 --- a/Example/PNObject/PNObjectAppDelegate.m +++ b/Example/PNObject/PNObjectAppDelegate.m @@ -33,14 +33,7 @@ [[PNObjectConfig sharedInstance] setEnvironment:Stage]; #endif - User *user = [User currentUser]; - [user setFirstName:@"Giuseppe"]; - [user setLastName:@"Nuficora"]; - [user setEmail:@"giuseppe.nucifora@purplenetwork.it"]; - [user setPassword:@"asdasdasd"]; - [user setConfirmPassword:@"asdasdasd"]; - PNObjectViewController *viewController = [[PNObjectViewController alloc] init]; _window.rootViewController = viewController; diff --git a/Example/PNObject/PNObjectViewController.m b/Example/PNObject/PNObjectViewController.m index c616abc..7100d8c 100644 --- a/Example/PNObject/PNObjectViewController.m +++ b/Example/PNObject/PNObjectViewController.m @@ -101,7 +101,16 @@ - (void) apiCallAction { - [[User currentUser] registerCurrentUserWithBlockSuccess:^(id _Nullable responseObject) { + User *user = [User currentUser]; + [user setFirstName:@"Giuseppe"]; + [user setLastName:@"Nuficora"]; + [user setEmail:@"giuseppe.nucifora@purplenetwork.it"]; + [user setPassword:@"asdasdasd"]; + [user setConfirmPassword:@"asdasdasd"]; + [user setHasAcceptedNewsletter:NO]; + [user setHasAcceptedPrivacy:YES]; + + [user registerCurrentUserWithBlockSuccess:^(id _Nullable responseObject) { } failure:^(NSError * _Nonnull error) { diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 60d159c..26edf11 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -123,6 +123,8 @@ 67459AD239EF669A365519E06B45DCFE /* EXPExpect.h in Headers */ = {isa = PBXBuildFile; fileRef = 85B934B7F86B106DF78204B7AE8B8EC3 /* EXPExpect.h */; settings = {ATTRIBUTES = (Public, ); }; }; 68152D921ABF6A423C192C04FDF94F0F /* AFNetworkReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 90F0F90EF4748B4A966D1DAF164931F4 /* AFNetworkReachabilityManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; 68527B0A6AE982293383787B56E689CE /* SPTSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 46FE1251C9E029D9BAE495F559EAE792 /* SPTSpec.m */; }; + 686ABCD31C68BB14000B3F7A /* AFJSONResponseSerializerWithData.h in Headers */ = {isa = PBXBuildFile; fileRef = 686ABCD11C68BB14000B3F7A /* AFJSONResponseSerializerWithData.h */; }; + 686ABCD41C68BB14000B3F7A /* AFJSONResponseSerializerWithData.m in Sources */ = {isa = PBXBuildFile; fileRef = 686ABCD21C68BB14000B3F7A /* AFJSONResponseSerializerWithData.m */; }; 68A38977EBAE334DC3C22386D00D2622 /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8896632DE267959FC9A58A136F288D51 /* AFNetworkReachabilityManager.m */; }; 6D5A30E2A230B959E8EE809CE4BB32A2 /* PNObjectConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = E302FEB8D6267D5AFF079585825E1ED7 /* PNObjectConfig.m */; }; 6DB00E9E820B5D01AB879D6D6C5761D0 /* ALView+PureLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = AE755B3A0FB88230CB157960D30465F3 /* ALView+PureLayout.m */; }; @@ -692,6 +694,8 @@ 659A88606C2EB56A078B8000BF3C76EF /* NSValue+Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+Expecta.h"; path = "Expecta/NSValue+Expecta.h"; sourceTree = ""; }; 665CA3EDF757B11180E35A2B3C4109A7 /* EXPMatchers+beSubclassOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beSubclassOf.m"; path = "Expecta/Matchers/EXPMatchers+beSubclassOf.m"; sourceTree = ""; }; 681D38A1CD2CBD39B4504C4812CB0AAE /* CodFis_Helper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CodFis_Helper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 686ABCD11C68BB14000B3F7A /* AFJSONResponseSerializerWithData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFJSONResponseSerializerWithData.h; sourceTree = ""; }; + 686ABCD21C68BB14000B3F7A /* AFJSONResponseSerializerWithData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFJSONResponseSerializerWithData.m; sourceTree = ""; }; 686B13BFDA57BED5365B141F8035571A /* UIDevice-Utils-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "UIDevice-Utils-prefix.pch"; sourceTree = ""; }; 68888A8DB78EC8BACCB7D5CB3E6FE473 /* AFURLRequestSerialization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AFURLRequestSerialization.h; path = AFNetworking/AFURLRequestSerialization.h; sourceTree = ""; }; 68AD8EB00582BE9183A47EBF5778229F /* CodFis-Helper-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CodFis-Helper-umbrella.h"; sourceTree = ""; }; @@ -1151,6 +1155,7 @@ 09DFBEE319FF263B46BE993205A73171 /* Vendors */ = { isa = PBXGroup; children = ( + 686ABCD01C68BADF000B3F7A /* AFJSONResponseSerializerWithData */, D59DE6098AB18223462166121D3EF123 /* AFOAuth2Manager */, ); path = Vendors; @@ -1461,6 +1466,15 @@ name = UIKit; sourceTree = ""; }; + 686ABCD01C68BADF000B3F7A /* AFJSONResponseSerializerWithData */ = { + isa = PBXGroup; + children = ( + 686ABCD11C68BB14000B3F7A /* AFJSONResponseSerializerWithData.h */, + 686ABCD21C68BB14000B3F7A /* AFJSONResponseSerializerWithData.m */, + ); + path = AFJSONResponseSerializerWithData; + sourceTree = ""; + }; 729C4611053B78A0900E14D5E1734624 /* Classes */ = { isa = PBXGroup; children = ( @@ -1885,6 +1899,7 @@ 0F1F7C0A6EC86A3FCF1BB0B073A097DD /* PNLocation.h in Headers */, 5CDCF5E6A1A6BC03466189CB90B0D256 /* PNObject+PNObjectConnection.h in Headers */, 34C796D4FBF079C1EE491183EA1A6FEC /* PNObject+Protected.h in Headers */, + 686ABCD31C68BB14000B3F7A /* AFJSONResponseSerializerWithData.h in Headers */, 44C7743BBE4CCB5065BDE9C1216B5DC9 /* PNObject-umbrella.h in Headers */, 847EED4B0EA774785C68431817CD93C9 /* PNObject.h in Headers */, E9D106AFF48125A694CE99CCA5D7A157 /* PNObjectConfig.h in Headers */, @@ -2902,6 +2917,7 @@ 8A2A0069F4D5044BE03B3F39CC374519 /* AFOAuthCredential.m in Sources */, D2ED781E66AD5CD401EBC86CD03E9C27 /* PNAddress.m in Sources */, 735F937F3E969009D5F40CB33909BF63 /* PNInstallation.m in Sources */, + 686ABCD41C68BB14000B3F7A /* AFJSONResponseSerializerWithData.m in Sources */, AC1BD14C511A7825CEB0753CFAE51C6D /* PNLocation.m in Sources */, 9AEC0D13C5E01C1B225458FE03A15CDE /* PNObject+PNObjectConnection.m in Sources */, 1D0DF59F3721D214418AE5F859BA6A94 /* PNObject+Protected.m in Sources */, diff --git a/PNObject.podspec b/PNObject.podspec index 0fb898a..0bc1119 100644 --- a/PNObject.podspec +++ b/PNObject.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = "PNObject" -s.version = "0.3.4" +s.version = "0.3.5" s.summary = "PNObject is a simple replica of the more complex ParseObject" # This description is used to generate tags and improve search results. diff --git a/Pod/Classes/PNClasses/PNUser.m b/Pod/Classes/PNClasses/PNUser.m index 6ccd89d..5633b0e 100644 --- a/Pod/Classes/PNClasses/PNUser.m +++ b/Pod/Classes/PNClasses/PNUser.m @@ -135,9 +135,7 @@ static bool isFirstAccess = YES; [self saveLocally]; } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { - if (failure) { - failure(error); - } + NSLogDebug(@"error : %ld",[error code]); }]; } diff --git a/Pod/Classes/PNObject+PNObjectConnection.m b/Pod/Classes/PNObject+PNObjectConnection.m index 023a53d..bf17ca9 100644 --- a/Pod/Classes/PNObject+PNObjectConnection.m +++ b/Pod/Classes/PNObject+PNObjectConnection.m @@ -17,7 +17,7 @@ @implementation PNObject (PNObjectConnection) + (void) GETWithProgress:(nullable void (^)(NSProgress * _Nonnull downloadProgress)) downloadProgress - success:(nullable void (^)(NSURLSessionDataTask * _Nullable task, PNObject * _Nullable responseObject))success + success:(nullable void (^)(NSURLSessionDataTask * _Nullable task, id _Nullable responseObject))success failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error))failure { if ([[PNObjectConfig sharedInstance] currentOauthCredential] && ![[[PNObjectConfig sharedInstance] currentOauthCredential] isExpired]) { @@ -52,7 +52,7 @@ + (void) GETWithEndpointAction:(NSString * _Nonnull) endPoint Progress:(nullable void (^)(NSProgress * _Nonnull downloadProgress)) downloadProgress - success:(nullable void (^)(NSURLSessionDataTask * _Nullable task, PNObject * _Nullable responseObject))success + success:(nullable void (^)(NSURLSessionDataTask * _Nullable task, id _Nullable responseObject))success failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error))failure { @@ -83,14 +83,6 @@ } } -+ (void) POSTWithProgress:(nullable void (^)(NSProgress * _Nonnull uploadProgress)) uploadProgress - success:(nullable void (^)(NSURLSessionDataTask * _Nullable task, PNObject * _Nullable responseObject))success - failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error))failure { - - - -} - - (void) POSTWithEndpointAction:(NSString * _Nonnull) endPoint Progress:(nullable void (^)(NSProgress * _Nonnull uploadProgress)) uploadProgress success:(nullable void (^)(NSURLSessionDataTask * _Nullable task, PNObject * _Nullable responseObject))success @@ -100,15 +92,19 @@ [[[PNObjectConfig sharedInstance] manager] POST:[[[PNObjectConfig sharedInstance] baseUrl] stringByAppendingFormat:@"%@",endPoint] parameters:[self JSONFormObject] progress:uploadProgress success:^(NSURLSessionDataTask *task, id responseObject) { - id PNObjectResponse = [[[self class] alloc] initWithJSON:[responseObject copy]]; + id PNObjectResponse; + if (responseObject) { + PNObjectResponse = [[[self class] alloc] initWithJSON:[responseObject copy]]; + } if (success) { success(task,PNObjectResponse); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { + if (failure) { - failure(task,error); + failure(task, error); } }]; } @@ -118,11 +114,23 @@ [self POSTWithEndpointAction:endPoint Progress:uploadProgress success:success failure:failure]; } failure:^(NSError * _Nonnull error) { - + if (failure) { + failure(nil,error); + } }]; } } + + ++ (NSError* _Nonnull) getErrorFromTask:(NSURLSessionDataTask* _Nonnull) task andError:(NSError * _Nonnull) error { + + NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response; + NSData *errorData = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey]; + NSDictionary *serializedData = [NSJSONSerialization JSONObjectWithData: errorData options:kNilOptions error:nil]; + + return [NSError errorWithDomain:[error domain] code:response.statusCode userInfo:serializedData]; +} /*+ (nullable NSURLSessionDataTask *) POSTConstructingBodyWithBlock:(nullable void (^)(id _Nonnull formData))block progress:(nullable void (^)(NSProgress * _Nonnull uploadProgress)) uploadProgress success:(nullable void (^)(NSURLSessionDataTask * _Nullable task, id _Nullable responseObject))success diff --git a/Pod/Classes/PNObjectConfig.m b/Pod/Classes/PNObjectConfig.m index 0581269..1ebb0e5 100644 --- a/Pod/Classes/PNObjectConfig.m +++ b/Pod/Classes/PNObjectConfig.m @@ -9,6 +9,7 @@ #import "PNObjectConfig.h" #import "PNObjectConstants.h" #import "PNUser.h" +#import "AFJSONResponseSerializerWithData.h" NSString * const PNObjectLocalNotificationRefreshTokenClientCredentialSuccess = @"PNObjectLocalNotificationRefreshTokenClientCredentialSuccess"; @@ -218,7 +219,9 @@ static bool isFirstAccess = YES; [self refreshTokenForClientCredential]; } } - + + _manager.responseSerializer = [AFJSONResponseSerializerWithData serializer]; + return _manager; } diff --git a/Pod/Classes/Vendors/AFJSONResponseSerializerWithData/AFJSONResponseSerializerWithData.h b/Pod/Classes/Vendors/AFJSONResponseSerializerWithData/AFJSONResponseSerializerWithData.h new file mode 100644 index 0000000..72063bb --- /dev/null +++ b/Pod/Classes/Vendors/AFJSONResponseSerializerWithData/AFJSONResponseSerializerWithData.h @@ -0,0 +1,15 @@ +// +// AFJSONResponseSerializerWithData.h +// Pods +// +// Created by Giuseppe Nucifora on 08/02/16. +// +// + +#import + +static NSString * const JSONResponseSerializerWithDataKey = @"JSONResponseSerializerWithDataKey"; + +@interface AFJSONResponseSerializerWithData : AFJSONResponseSerializer + +@end diff --git a/Pod/Classes/Vendors/AFJSONResponseSerializerWithData/AFJSONResponseSerializerWithData.m b/Pod/Classes/Vendors/AFJSONResponseSerializerWithData/AFJSONResponseSerializerWithData.m new file mode 100644 index 0000000..bf47784 --- /dev/null +++ b/Pod/Classes/Vendors/AFJSONResponseSerializerWithData/AFJSONResponseSerializerWithData.m @@ -0,0 +1,31 @@ +// +// AFJSONResponseSerializerWithData.m +// Pods +// +// Created by Giuseppe Nucifora on 08/02/16. +// +// + +#import "AFJSONResponseSerializerWithData.h" + +@implementation AFJSONResponseSerializerWithData + +- (id)responseObjectForResponse:(NSURLResponse *)response + data:(NSData *)data + error:(NSError *__autoreleasing *)error +{ + id JSONObject = [super responseObjectForResponse:response data:data error:error]; + NSHTTPURLResponse *currentResponse = (NSHTTPURLResponse*)response; + + if (*error != nil) { + NSData *errorData = [[(*error).userInfo mutableCopy] objectForKey:AFNetworkingOperationFailingURLResponseDataErrorKey]; + NSMutableDictionary *userInfo = [NSJSONSerialization JSONObjectWithData: errorData options:kNilOptions error:nil];; + + NSError *newError = [NSError errorWithDomain:(*error).domain code:currentResponse.statusCode userInfo:userInfo]; + (*error) = newError; + } + + return (JSONObject); +} + +@end