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.
| here setup, post list of objects in json server , got updated results mapped core data , updated. -- post boday -- -- post response -- i found thread discusses similar case. restkit: how 1 post array of objects? this setup. -- shcontact.h -- -- shcontactpost.m -- -- rk mapping -- -- post server -- server post , response successful. however, reskit not able map result list of shcontact objects. exception. missing something? update: changed make work me. -- rk mapping -- -- post server -- loader.targetobject needs set nil, otherwise, won't work. | |||||
|