// // JSONModel+networking.m // JSONModel // #import "JSONModel+networking.h" #import "JSONHTTPClient.h" #pragma GCC diagnostic ignored "-Wdeprecated-declarations" #pragma GCC diagnostic ignored "-Wdeprecated-implementations" BOOL _isLoading; @implementation JSONModel(Networking) @dynamic isLoading; -(BOOL)isLoading { return _isLoading; } -(void)setIsLoading:(BOOL)isLoading { _isLoading = isLoading; } -(instancetype)initFromURLWithString:(NSString *)urlString completion:(JSONModelBlock)completeBlock { id placeholder = [super init]; __block id blockSelf = self; if (placeholder) { //initialization self.isLoading = YES; [JSONHTTPClient getJSONFromURLWithString:urlString completion:^(NSDictionary *json, JSONModelError* e) { JSONModelError* initError = nil; blockSelf = [self initWithDictionary:json error:&initError]; if (completeBlock) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{ completeBlock(blockSelf, e?e:initError ); }); } self.isLoading = NO; }]; } return placeholder; } + (void)getModelFromURLWithString:(NSString*)urlString completion:(JSONModelBlock)completeBlock { [JSONHTTPClient getJSONFromURLWithString:urlString completion:^(NSDictionary* jsonDict, JSONModelError* err) { JSONModel* model = nil; if(err == nil) { model = [[self alloc] initWithDictionary:jsonDict error:&err]; } if(completeBlock != nil) { dispatch_async(dispatch_get_main_queue(), ^ { completeBlock(model, err); }); } }]; } + (void)postModel:(JSONModel*)post toURLWithString:(NSString*)urlString completion:(JSONModelBlock)completeBlock { [JSONHTTPClient postJSONFromURLWithString:urlString bodyString:[post toJSONString] completion:^(NSDictionary* jsonDict, JSONModelError* err) { JSONModel* model = nil; if(err == nil) { model = [[self alloc] initWithDictionary:jsonDict error:&err]; } if(completeBlock != nil) { dispatch_async(dispatch_get_main_queue(), ^ { completeBlock(model, err); }); } }]; } @end