これはおそらく何百万回も尋ねられてきましたが、私が見つけたすべての例からどこにも得られていません。
私は次のクラスを持っています:
@interface LoginRequest : NSObject
{
NSString* _deviceId;
}
@property (nonatomic, retain) NSString* deviceId;
@end
そして、これをサーバーに投稿しようとしています。これは、HTTPボディでフォームキー/値としてエンコードされています。
マッピングを設定するために以下を使用しています。
objectManager.serializationMIMEType = RKMIMETypeFormURLEncoded;
RKObjectMapping* pmsg = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
[pmsg mapKeyPath: @"deviceId" toAttribute:@"DeviceId"];
RKObjectMapping* pmsgSerializeMapping = [pmsg inverseMapping];
[objectManager.mappingProvider setSerializationMapping:pmsgSerializeMapping forClass:[LoginRequest class]];
[objectManager.router routeClass:[LoginRequest class] toResourcePath:@"/login" forMethod:RKRequestMethodPOST];
これは、次の例から取得されました:https ://github.com/RestKit/RestKit/wiki/Posting-Data-Objects
次のエラーが発生します。
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<LoginRequest 0x8c9c980> valueForUndefinedKey:]: this class is not key value coding-compliant for the key DeviceId.'
オブジェクトを送信しようとしている方法は次のとおりです。
RKObjectManager *objectManager = [RKObjectManager sharedManager];
LoginRequest* request = [LoginRequest alloc];
request.deviceId = @"Test";
[objectManager postObject:request delegate: self];
誰か助けてもらえますか?
更新:カスタムキーコードマッピングを使用しない場合は、機能することを確認できます。私が働いているのは次のとおりです。
RKObjectMapping* pmsg = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
[pmsg mapAttributes:@"DeviceId", nil];
[objectManager.mappingProvider setSerializationMapping:pmsg forClass:[LoginRequest class]];
[objectManager.router routeClass:[LoginRequest class] toResourcePath:@"/login" forMethod:RKRequestMethodPOST];