POSTを実行するには、RKClientの代わりにRKObjectMangerを使用します。次に、このメソッドが呼び出されたときに、応答をオブジェクトにロードできます。
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects
編集(サーバーに送信するJSONを指定):
現在行っている方法でJSONを作成する代わりに、カスタムモデルクラスを作成できます。
まず、最上位オブジェクトのモデルクラスを作成できます(Userと呼ばれると仮定します)。
ユーザーヘッダー
// User.h
#import <Foundation/Foundation.h>
@interface User : NSObject
@property (nonatomic) int memberId;
@property (nonatomic, copy) NSString *countryCode;
@property (nonatomic, strong) NSArray *contacts;
@end
ユーザーの実装
// User.m
#import "User.h"
@implementation User
@synthesize memberId;
@synthesize countryCode;
@synthesize contacts;
@end
次に、Contactというモデルクラスを作成できます。
連絡先ヘッダー
// Contact.h
#import <Foundation/Foundation.h>
@interface Contact : NSObject
@property (nonatomic, strong) NSString *phoneNumber;
@property (nonatomic) int memberId;
@property (nonatomic) int contactId;
@property (nonatomic, strong) NSString *name;
@end
連絡先の実装
// Contact.m
#import "Contact.h"
@implementation Contact
@synthesize phoneNumber;
@synthesize memberId;
@synthesize contactId;
@synthesize name;
@end
これらのクラスは次のように使用できます。
Contact *john = [[Contact alloc] init];
john.phoneNumber = @"+12233333333";
john.memberId = 2222;
john.contactId = 123456;
john.name = @"john";
Contact *mary = [[Contact alloc] init];
mary.phoneNumber = @"+12244444444";
mary.memberId = 3333;
mary.contactId = 123457;
mary.name = @"mary";
User *user = [[User alloc] init];
user.memberId = 1000000;
user.countryCode = @"US";
user.contacts = [NSArray arrayWithObjects:john, mary, nil];
RKObjectMapping *contactsMapping = [RKObjectMapping mappingForClass:[Contact class]];
[contactsMapping mapKeyPath:@"phoneNumber" toAttribute:@"phoneNumber"];
[contactsMapping mapKeyPath:@"memberId" toAttribute:@"memberId"];
[contactsMapping mapKeyPath:@"contactId" toAttribute:@"contactId"];
[contactsMapping mapKeyPath:@"name" toAttribute:@"name"];
RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:[User class]];
[objectMapping mapKeyPath:@"memberId" toAttribute:@"memberId"];
[objectMapping mapKeyPath:@"countryCode" toAttribute:@"countryCode"];
[objectMapping mapKeyPath:@"contacts" toRelationship:@"contacts" withMapping:contactsMapping];
//Then you set up a serialization mapping and object mapping and POST it
//This method takes care of both the serialization and object mapping
[[RKObjectManager sharedManager].mappingProvider registerMapping:objectMapping withRootKeyPath:@"user"];
//POST it
[[RKObjectManager sharedManager] postObject:user delegate:self];
シリアル化マッピングとPOSTの実行方法を説明する前に、期待しているJSON応答の種類を知る必要があります。
編集(サーバーから返されたJSONを指定):
シリアル化マッピングとオブジェクトマッピングを設定してPOSTするには、リソースパスを設定する必要があります(アプリを起動するときに行います)。
RKObjectRouter *router = [RKObjectManager sharedManager].router;
[router routeClass:[User class] toResourcePath:@"/users" forMethod:RKRequestMethodPOST];
リソースパスは「/users」以外のものである可能性があります。
コメントの下のコードを見てください//Then you set up a serialization mapping and object mapping and POST it
。ここでは、シリアル化マッピング、オブジェクトマッピング、およびPOSTを追加しました。