Skip to main content

objective c - Restkit: Post Json Array and Map response to Managed Objects -


here setup, post list of objects in json server , got updated results mapped core data , updated.

-- post boday --

{ "memberid": "1000000", "contacts": [ { "phonenumber": "+12233333333", "firstname": "john", "lastname": "h" }, { "phonenumber": "+12244444444", "firstname": "mary", "lastname": "k" } ] } 

-- post response --

{ "contacts": [ { "phonenumber": "+12233333333", "firstname": "john", "lastname": "k", "ismember": "yes" }, { "phonenumber": "+12244444444", "firstname": "mary", "lastname": "k", "ismember": "no" } ] } 

i found thread discusses similar case. restkit: how 1 post array of objects?

this setup.

-- shcontact.h --

@interface shcontact : nsmanagedobject {} @property (nonatomic, strong) nsstring* phonenumber; @property (nonatomic, strong) nsstring* firstname; @property (nonatomic, strong) nsstring* lastname; @property (nonatomic, strong) nsnumber* ismember; @end 

-- shcontactpost.m --

#import "shcontactpost.h" @implementation shcontactpost @synthesize contacts; @synthesize memberid; - (nsarray*)contacts { return <list-of-shcontact>; } - (nsstring *)memberid { return @"my-member-id"; } @end 

-- rk mapping --

// setup our object mappings shcontact rkmanagedobjectmapping* contactmapping = [rkmanagedobjectmapping mappingforclass:[shcontact class] inmanagedobjectstore:objectmanager.objectstore]; contactmapping.primarykeyattribute = @"phonenumber"; [contactmapping mapattributes:@"phonenumber", @"firstname", @"lastname", @"ismember", nil]; [objectmanager.mappingprovider setobjectmapping:contactmapping forkeypath:@"contacts"]; [[objectmanager mappingprovider] setserializationmapping:[contactmapping inversemapping] forclass:[shcontact class]]; rkobjectmapping *cpostmapping = [rkobjectmapping mappingforclass:[shcontactpost class]]; [cpostmapping mapkeypath:@"contacts" torelationship:@"contacts" withmapping:contactmapping]; [cpostmapping mapattributes:@"memberid", nil]; [objectmanager.mappingprovider setserializationmapping:[cpostmapping inversemapping] forclass:[shcontactpost class]]; [objectmanager.router routeclass:[shcontactpost class] toresourcepath:@"/contacts" formethod:rkrequestmethodpost]; objectmanager.serializationmimetype = rkmimetypejson; 

-- post server --

shcontactpost *post = [[shcontactpost alloc] init]; rkobjectmanager* manager = [rkobjectmanager sharedmanager]; [manager postobject:post delegate:self]; 

server post , response successful. however, reskit not able map result list of shcontact objects. exception. missing something?

restkit.network:rkobjectloader.m:222 encountered errors during mapping: cannot map collection of objects onto non-mutable collection. unexpected destination object type 'shcontactpost' 

update: changed make work me.

-- rk mapping --

// setup our object mappings shcontact rkmanagedobjectmapping* contactmapping = [rkmanagedobjectmapping mappingforclass:[shcontact class] inmanagedobjectstore:objectmanager.objectstore]; contactmapping.primarykeyattribute = @"phonenumber"; [contactmapping mapattributes:@"phonenumber", @"firstname", @"lastname", @"ismember", nil]; [objectmanager.mappingprovider addobjectmapping:contactmapping]; 

-- post server --

shcontactpost *post = [[shcontactpost alloc] init]; rkobjectmanager* manager = [rkobjectmanager sharedmanager]; rkobjectmapping* responsemapping = [manager.mappingprovider objectmappingforclass:[shcontact class]]; [manager postobject:post usingblock:^(rkobjectloader *loader) { loader.delegate = self; loader.targetobject = nil; responsemapping.rootkeypath = @"contacts"; loader.objectmapping = responsemapping; }]; 

loader.targetobject needs set nil, otherwise, won't work.

objective c - restkit: post json array , map response managed objects - stack overflow

learn, share, build

each month, on 50 million developers come stack overflow learn, share knowledge, , build careers.

join world’s largest developer community.

sign up

here setup, post list of objects in json server , got updated results mapped core data , updated.

-- post boday --

{ "memberid": "1000000", "contacts": [ { "phonenumber": "+12233333333", "firstname": "john", "lastname": "h" }, { "phonenumber": "+12244444444", "firstname": "mary", "lastname": "k" } ] } 

-- post response --

{ "contacts": [ { "phonenumber": "+12233333333", "firstname": "john", "lastname": "k", "ismember": "yes" }, { "phonenumber": "+12244444444", "firstname": "mary", "lastname": "k", "ismember": "no" } ] } 

i found thread discusses similar case. restkit: how 1 post array of objects?

this setup.

-- shcontact.h --

@interface shcontact : nsmanagedobject {} @property (nonatomic, strong) nsstring* phonenumber; @property (nonatomic, strong) nsstring* firstname; @property (nonatomic, strong) nsstring* lastname; @property (nonatomic, strong) nsnumber* ismember; @end 

-- shcontactpost.m --

#import "shcontactpost.h" @implementation shcontactpost @synthesize contacts; @synthesize memberid; - (nsarray*)contacts { return <list-of-shcontact>; } - (nsstring *)memberid { return @"my-member-id"; } @end 

-- rk mapping --

// setup our object mappings shcontact rkmanagedobjectmapping* contactmapping = [rkmanagedobjectmapping mappingforclass:[shcontact class] inmanagedobjectstore:objectmanager.objectstore]; contactmapping.primarykeyattribute = @"phonenumber"; [contactmapping mapattributes:@"phonenumber", @"firstname", @"lastname", @"ismember", nil]; [objectmanager.mappingprovider setobjectmapping:contactmapping forkeypath:@"contacts"]; [[objectmanager mappingprovider] setserializationmapping:[contactmapping inversemapping] forclass:[shcontact class]]; rkobjectmapping *cpostmapping = [rkobjectmapping mappingforclass:[shcontactpost class]]; [cpostmapping mapkeypath:@"contacts" torelationship:@"contacts" withmapping:contactmapping]; [cpostmapping mapattributes:@"memberid", nil]; [objectmanager.mappingprovider setserializationmapping:[cpostmapping inversemapping] forclass:[shcontactpost class]]; [objectmanager.router routeclass:[shcontactpost class] toresourcepath:@"/contacts" formethod:rkrequestmethodpost]; objectmanager.serializationmimetype = rkmimetypejson; 

-- post server --

shcontactpost *post = [[shcontactpost alloc] init]; rkobjectmanager* manager = [rkobjectmanager sharedmanager]; [manager postobject:post delegate:self]; 

server post , response successful. however, reskit not able map result list of shcontact objects. exception. missing something?

restkit.network:rkobjectloader.m:222 encountered errors during mapping: cannot map collection of objects onto non-mutable collection. unexpected destination object type 'shcontactpost' 

update: changed make work me.

-- rk mapping --

// setup our object mappings shcontact rkmanagedobjectmapping* contactmapping = [rkmanagedobjectmapping mappingforclass:[shcontact class] inmanagedobjectstore:objectmanager.objectstore]; contactmapping.primarykeyattribute = @"phonenumber"; [contactmapping mapattributes:@"phonenumber", @"firstname", @"lastname", @"ismember", nil]; [objectmanager.mappingprovider addobjectmapping:contactmapping]; 

-- post server --

shcontactpost *post = [[shcontactpost alloc] init]; rkobjectmanager* manager = [rkobjectmanager sharedmanager]; rkobjectmapping* responsemapping = [manager.mappingprovider objectmappingforclass:[shcontact class]]; [manager postobject:post usingblock:^(rkobjectloader *loader) { loader.delegate = self; loader.targetobject = nil; responsemapping.rootkeypath = @"contacts"; loader.objectmapping = responsemapping; }]; 

loader.targetobject needs set nil, otherwise, won't work.

share|improve question
4  
you may want post answer answer, , accept :-) – ivan vuäica may 31 '13 @ 15:32

your answer

 
discard

posting answer, agree privacy policy , terms of service.

browse other questions tagged or ask own question.


Comments

Popular posts from this blog

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

c++ - Accessing inactive union member and undefined behavior? -

php - Get uncommon values from two or more arrays -