{"id":2186,"date":"2022-08-30T15:22:46","date_gmt":"2022-08-30T15:22:46","guid":{"rendered":"https:\/\/unknownerror.org\/index.php\/2014\/01\/04\/ios-post-with-restkit-callback-functions-not-called-mapping-data-used-collection-of-common-programming-errors\/"},"modified":"2022-08-30T15:22:46","modified_gmt":"2022-08-30T15:22:46","slug":"ios-post-with-restkit-callback-functions-not-called-mapping-data-used-collection-of-common-programming-errors","status":"publish","type":"post","link":"https:\/\/unknownerror.org\/index.php\/2022\/08\/30\/ios-post-with-restkit-callback-functions-not-called-mapping-data-used-collection-of-common-programming-errors\/","title":{"rendered":"iOS &#8211; POST with RestKit : callback functions not called &#8211; (mapping data used)-Collection of common programming errors"},"content":{"rendered":"<p>Hi all it&#8217;s my first post in stack-overflow,<\/p>\n<p>So First, thank you very much to everyone who shares!<\/p>\n<p>My problems are :<\/p>\n<ul>\n<li>I dont have callback return when I use RKObjectManager for POST Serialized object.<\/li>\n<li>And I don&#8217;t know if my use of Mapping data is correct &#8230;<\/li>\n<\/ul>\n<p>So I show you the result of my restful service (formated in JSON), my code and my restkit Logs<\/p>\n<pre><code>{\"sessionId\":\"DA93D5ECD8E338AA27800794EEB9C20F\",\"user\":{\"id\":3,\"ref\":\"2461498766\",\"login\":\"clientTest\",\"mail\":\"clientTest@Test.com\",\"phone\":\"client127\",\"subId\":3,\"creation\":\"29\/03\/2010 10:33:24\",\"language\":\"en\",\"firstConnection\":\"30\/03\/2010 16:42:07\",\"lastConnection\":\"02\/11\/2011 09:36:43\",\"connectionStep\":\"6\"},\"gateway\":{\"id\":3,\"serial\":\"testserial\",\"status\":\"A\",\"led\":\"START\",\"ref\":\"DJJHGGGG00009\",\"type\":\"FULL\",\"ip\":\"192.168.44.168\",\"connection\":\"\",\"initDate\":1290694795533,\"activationDate\":1290694795533,\"manufacDate\":1269851384000,\"imei\":\"354482020013035\",\"model\":\"TYLOP\",\"firmware\":\"1.3.1\",\"version\":\"\",\"macWifi\":\"...\",\"macEthernet\":\"...\",\"updateDate\":1310053274000,\"muteMode\":\"\",\"timezone\":\"\"}}\n<\/code><\/pre>\n<p>As you can see, we have a global Object with inside : User, Gateway Objects.<\/p>\n<p>VOAuth.h, my global object used for data mapping :<\/p>\n<pre><code>#import \"VOUser.h\"\n#import \"VOGateway.h\"\n\n@interface VOAuth : NSObject\n@property (nonatomic, retain) NSString * sessionId;\n@property (nonatomic, retain) VOUser * user;\n@property (nonatomic, retain) VOGateway * gateway;\n@end\n<\/code><\/pre>\n<p>VOGateway.h,<\/p>\n<pre><code>#import \n\n@interface VOGateway : NSObject\n\n@property (nonatomic, retain) NSString * identifier;\n@property (nonatomic, retain) NSString * serial;\n@property (nonatomic, retain) NSString * status;\n@property (nonatomic, retain) NSString * led;\n@property (nonatomic, retain) NSString * ref;\n@property (nonatomic, retain) NSString * type;\n@property (nonatomic, retain) NSString * ip;\n@property (nonatomic, retain) NSString * connection;\n@property (nonatomic, retain) NSString * initDate;\n@property (nonatomic, retain) NSString * activationDate;\n@property (nonatomic, retain) NSString * manufacDate;\n@property (nonatomic, retain) NSString * imei;\n@property (nonatomic, retain) NSString * model;\n@property (nonatomic, retain) NSString * firmware;\n@property (nonatomic, retain) NSString * version;\n@property (nonatomic, retain) NSString * macWifi;\n@property (nonatomic, retain) NSString * macEthernet;\n@property (nonatomic, retain) NSString * updateDate;\n@property (nonatomic, retain) NSString * muteMode;\n@property (nonatomic, retain) NSString * timezone;\n\n@end\n<\/code><\/pre>\n<p>VOUser.h,<\/p>\n<pre><code>#import \n\n@interface VOUser : NSObject\n\n@property (nonatomic, retain) NSString * identifier;\n@property (nonatomic, retain) NSString * ref;\n@property (nonatomic, retain) NSString * login;\n@property (nonatomic, retain) NSString * mail;\n@property (nonatomic, retain) NSString * phone;\n@property (nonatomic, retain) NSString * subId;\n@property (nonatomic, retain) NSString * creation;\n@property (nonatomic, retain) NSString * language;\n@property (nonatomic, retain) NSString * firstConnection;\n@property (nonatomic, retain) NSString * lastConnection;\n@property (nonatomic, retain) NSString * connectionStep;\n\n@end\n<\/code><\/pre>\n<p>SOAuth.h (my serialized object used as parameters for my call),<\/p>\n<pre><code>#import \n\n@interface SOAuth : NSObject\n@property (nonatomic, retain) NSString* login;\n@property (nonatomic, retain) NSString* password;\n@end\n<\/code><\/pre>\n<p>MAModule.h (My manger, i call my restfull service here),<\/p>\n<pre><code>#import \n#import \n#import \"VOUser.h\"\n#import \"VOGateway.h\"\n#import \"VOAuth.h\"\n#import \"SOAuth.h\"\n@interface MAModule : NSObject \n-(void)sendLogIn;\n- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects;\n- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error;\n@end\n<\/code><\/pre>\n<p>MAModule.m,<\/p>\n<pre><code>#import \"MAModule.h\"\n\n@implementation MAModule\n\n-(void)sendLogIn\n{\n\nRKLogConfigureByName(\"RestKit\/Network\", RKLogLevelTrace);\n\nRKObjectManager* manager = [RKObjectManager    objectManagerWithBaseURL:@\"http:\/\/mydomain.dev\/ui\/v1\"];\n[RKObjectManager sharedManager].serializationMIMEType = RKMIMETypeJSON;\n[manager.router routeClass:[SOAuth class] toResourcePath:@\"\/auth\" forMethod:RKRequestMethodPOST];\n\nRKObjectMapping* authSerializationMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class] ];\n[authSerializationMapping mapAttributes:@\"login\", @\"password\", nil];\n[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:authSerializationMapping forClass:[SOAuth class] ];\n\nRKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[VOUser class]];\n[userMapping mapKeyPath:@\"id\" toAttribute:@\"identifier\"];\n[userMapping mapKeyPath:@\"ref\" toAttribute:@\"ref\"];\n[userMapping mapKeyPath:@\"login\" toAttribute:@\"login\"];\n[userMapping mapKeyPath:@\"mail\" toAttribute:@\"mail\"];\n[userMapping mapKeyPath:@\"phone\" toAttribute:@\"phone\"];\n[userMapping mapKeyPath:@\"subId\" toAttribute:@\"subId\"];\n[userMapping mapKeyPath:@\"creation\" toAttribute:@\"creation\"];\n[userMapping mapKeyPath:@\"language\" toAttribute:@\"language\"];\n[userMapping mapKeyPath:@\"firstConnection\" toAttribute:@\"firstConnection\"];\n[userMapping mapKeyPath:@\"lastConnection\" toAttribute:@\"lastConnection\"];\n[userMapping mapKeyPath:@\"connectionStep\" toAttribute:@\"connectionStep\"];\n\n\nRKObjectMapping *gatewayMapping = [RKObjectMapping mappingForClass:[VOGateway class]];\n[gatewayMapping mapKeyPath:@\"id\" toAttribute:@\"identifier\"];\n[gatewayMapping mapKeyPath:@\"serial\" toAttribute:@\"serial\"];\n[gatewayMapping mapKeyPath:@\"status\" toAttribute:@\"status\"];\n[gatewayMapping mapKeyPath:@\"led\" toAttribute:@\"led\"];\n[gatewayMapping mapKeyPath:@\"ref\" toAttribute:@\"ref\"];\n[gatewayMapping mapKeyPath:@\"type\" toAttribute:@\"type\"];\n[gatewayMapping mapKeyPath:@\"ip\" toAttribute:@\"ip\"];\n[gatewayMapping mapKeyPath:@\"connection\" toAttribute:@\"connection\"];\n[gatewayMapping mapKeyPath:@\"initDate\" toAttribute:@\"initDate\"];\n[gatewayMapping mapKeyPath:@\"activationDate\" toAttribute:@\"activationDate\"];\n[gatewayMapping mapKeyPath:@\"manufacDate\" toAttribute:@\"manufacDate\"];\n[gatewayMapping mapKeyPath:@\"imei\" toAttribute:@\"imei\"];\n[gatewayMapping mapKeyPath:@\"model\" toAttribute:@\"model\"];\n[gatewayMapping mapKeyPath:@\"firmware\" toAttribute:@\"firmware\"];\n[gatewayMapping mapKeyPath:@\"version\" toAttribute:@\"version\"];\n[gatewayMapping mapKeyPath:@\"macWifi\" toAttribute:@\"macWifi\"];\n[gatewayMapping mapKeyPath:@\"macEthernet\" toAttribute:@\"macEthernet\"];\n[gatewayMapping mapKeyPath:@\"updateDate\" toAttribute:@\"updateDate\"];\n[gatewayMapping mapKeyPath:@\"muteMode\" toAttribute:@\"muteMode\"];\n[gatewayMapping mapKeyPath:@\"timezone\" toAttribute:@\"timezone\"];\n\nRKObjectMapping *authReturnMapping = [RKObjectMapping mappingForClass:[VOAuth class]];\n[authReturnMapping mapKeyPath:@\"sessionId\" toAttribute:@\"sessionId\"];\n[authReturnMapping mapKeyPath:@\"user\" toRelationship:@\"user\" withMapping:userMapping];\n[authReturnMapping mapKeyPath:@\"gateway\" toRelationship:@\"gateway\" withMapping:gatewayMapping];\n[[RKObjectManager sharedManager].mappingProvider setMapping:authReturnMapping forKeyPath:@\"\"];\n[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[authReturnMapping inverseMapping] forClass:[VOAuth class]]; \n\nNSLog(@\"LOGIN SEND --------------------------------\");    \nSOAuth *logObj = [[SOAuth alloc]init];\nlogObj.login = @\"clientTest\";\nlogObj.password = @\"216a2e1269b5daaa35fd911964e5a86ce11f267d\";\n\nRKObjectMapping* authhMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[VOAuth class] ];\n[[RKObjectManager sharedManager] postObject:logObj mapResponseWith:authhMapping delegate:nil];\n}\n\n- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {\n\/\/RKLogInfo(@\"Load collection of Articles: %@\", objects);\nNSLog(@\"LOGIN OK --------------------------------\");\n}\n\n- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {\nNSLog(@\"LOGIN KO --------------------------------\");\n}\n\n@end\n<\/code><\/pre>\n<p>I would like to highlight few points :<\/p>\n<ul>\n<li>\n<p>[[RKObjectManager sharedManager].mappingProvider setMapping:authReturnMapping forKeyPath:@&#8221;&#8221;] : I have an empty key for my global object mapping, because I don&#8217;t have root key for it &#8230;<\/p>\n<\/li>\n<li>\n<p>[[RKObjectManager sharedManager] postObject:logObj mapResponseWith:authhMapping delegate:nil]; My delegate is nil, else my application crash &#8230;<\/p>\n<\/li>\n<\/ul>\n<p>LOGS :<\/p>\n<pre><code>2011-11-02 11:04:50.824 RestKit Installation[3701:207] D restkit.network:RKClient.m:265 Reachability observer changed for client , suspending queue (null) until reachability to host '0.0.0.0' can be determined\n2011-11-02 11:04:50.827 RestKit Installation[3701:207] LOGIN SEND --------------------------------\n2011-11-02 11:04:50.833 RestKit Installation[3701:207] D restkit.network:RKClient.m:378 Reachability to host '0.0.0.0' determined for client , unsuspending queue \n2011-11-02 11:04:50.836 RestKit Installation[3701:207] D restkit.network:RKRequest.m:334 Sending asynchronous POST request to URL http:\/\/mydomain.dev\/ui\/v1\/auth.\n2011-11-02 11:04:50.836 RestKit Installation[3701:207] D restkit.network:RKObjectLoader.m:302 POST or PUT request for source object , serializing to MIME Type application\/json for transport...\n2011-11-02 11:04:50.838 RestKit Installation[3701:207] T restkit.network:RKRequest.m:282 Prepared POST URLRequest ''. HTTP Headers: {\nAccept = \"application\/json\";\n\"Content-Length\" = 75;\n\"Content-Type\" = \"application\/json\";\n}. HTTP Body:       {\"login\":\"clientTest\",\"password\":\"216a2e1269b5daaa35fd911964e5a86ce11f267d\"}.\n2011-11-02 11:04:51.432 RestKit Installation[3701:207] D restkit.network:RKResponse.m:196 NSHTTPURLResponse Status Code: 200\n2011-11-02 11:04:51.433 RestKit Installation[3701:207] D restkit.network:RKResponse.m:197 Headers: {\nConnection = close;\n\"Content-Length\" = 763;\n\"Content-Type\" = \"application\/json\";\nDate = \"Wed, 02 Nov 2011 10:04:57 GMT\";\n}\n2011-11-02 11:04:51.434 RestKit Installation[3701:207] T restkit.network:RKResponse.m:202 Read response body: {\"sessionId\":\"DA93D5ECD8E338AA27800794EEB9C20F\",\"user\":{\"id\":3,\"ref\":\"2461498766\",\"login\":\"clientTest\",\"mail\":\"clientTest@Test.com\",\"phone\":\"client127\",\"subId\":3,\"creation\":\"29\/03\/2010 10:33:24\",\"language\":\"en\",\"firstConnection\":\"30\/03\/2010 16:42:07\",\"lastConnection\":\"02\/11\/2011 09:36:43\",\"connectionStep\":\"6\"},\"gateway\":{\"id\":3,\"serial\":\"testserial\",\"status\":\"A\",\"led\":\"START\",\"ref\":\"DJJHGGGG00009\",\"type\":\"FULL\",\"ip\":\"192.168.44.168\",\"connection\":\"\",\"initDate\":1290694795533,\"activationDate\":1290694795533,\"manufacDate\":1269851384000,\"imei\":\"354482020013035\",\"model\":\"TYLOP\",\"firmware\":\"1.3.1\",\"version\":\"\",\"macWifi\":\"...\",\"macEthernet\":\"...\",\"updateDate\":1310053274000,\"muteMode\":\"\",\"timezone\":\"\"}}\n2011-11-02 11:04:51.438 RestKit Installation[3701:6003] D restkit.network:RKObjectLoader.m:210 Found directly configured object mapping, creating temporary mapping provider for keyPath '%@'\n<\/code><\/pre>\n<p>Finally,<\/p>\n<p>My callback functions are not called :<\/p>\n<ul>\n<li>\n<p>(void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects<\/p>\n<\/li>\n<li>\n<p>(void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error<\/p>\n<\/li>\n<\/ul>\n<p>Hoping someone can help me,<\/p>\n<p>TY.<\/p>\n<ol>\n<li>\n<p>Your methods are not called, because you set <code>nil<\/code> as your delegate. As per our later discussion, if self is passed as the delegate, the subsequent crash is caused by <code>MAModule<\/code> being released too early. Use either property or singleton pattern to retain the <code>MAModule<\/code> object at least until your requests are completed.<\/p>\n<\/li>\n<\/ol>\n<p id=\"rop\"><small>Originally posted 2014-01-04 02:52:21. <\/small><\/p>","protected":false},"excerpt":{"rendered":"<p>Hi all it&#8217;s my first post in stack-overflow, So First, thank you very much to everyone who shares! My problems are : I dont have callback return when I use RKObjectManager for POST Serialized object. And I don&#8217;t know if my use of Mapping data is correct &#8230; So I show you the result of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2186","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/2186","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/comments?post=2186"}],"version-history":[{"count":0,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/2186\/revisions"}],"wp:attachment":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/media?parent=2186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/categories?post=2186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/tags?post=2186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}