RestKitを使用してサーバーにオブジェクトを投稿する際に問題が発生しました。昨夜のバージョンのRestKitを使用していますが、少なくとも昨年から問題になっています。私がやっていることは、新しいオブジェクトをサーバーに保存しようとしていますが、保存すると、リクエストがサーバーに送信される前にマッピングエラーが発生します。問題は、RestKitのドキュメントに非対称である必要はないと記載されていても、JSON応答キーとNSObject属性が非対称であるということです。新しいPOSTコマンドを追加する前は、JSON応答をダウンロードするためのGETコマンドで問題ありませんでした。RestKitは非対称鍵マッピングに問題はなく、すべてが機能しました。ただし、NSObjectをサーバーにPOSTしようとしているため、NSUknownKeyExceptionエラーが発生します。キーを対称に変更すると、RKObjectMappingOperationが完了し、POSTが実際にサーバーに送信されます。これは私にはバグのように思えますが、これが投稿の要件ではないことを確認したかったのです。
これが私のコードの詳細です。マッピングは次のとおりです。
RKObjectMapping* restaurantReviewMapping = [RKObjectMapping mappingForClass:[RestaurantReview class] ];
[restaurantReviewMapping mapKeyPath:@"restaurant_id" toAttribute:@"restaurantId"];
[restaurantReviewMapping mapKeyPath:@"title" toAttribute:@"title"];
[restaurantReviewMapping mapKeyPath:@"review" toAttribute:@"review"];
NSObjectは次のとおりです。
@interface RestaurantReview : NSObject
@property (nonatomic, retain) NSNumber* restaurantId;
@property (nonatomic, retain) NSNumber* rating;
@property (nonatomic, retain) NSString* title;
@end
オブジェクトマッピングドキュメントからコピーされたポストコマンド:
[[RKObjectManager sharedManager] sendObject:review toResourcePath:fullRestaurantReviewUrl usingBlock:^(RKObjectLoader *loader) {
loader.method = RKRequestMethodPOST;
loader.delegate = self;
loader.serializationMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[RestaurantReview class] ];
}];
そして最後に、リクエストがサーバーに送信される前に私が受け取るエラーは次のとおりです。
2012-08-23 14:57:49.118 [61331:c07] D restkit.network:RKObjectLoader.m:374 POST or PUT request for source object <RestaurantReview: 0x74d55c0>, serializing to MIME Type application/json for transport...
2012-08-23 14:57:49.119 [61331:c07] D restkit.object_mapping:RKObjectMappingOperation.m:655 Starting mapping operation...
2012-08-23 14:57:49.184 [61331:c07] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<RestaurantReview 0x74d55c0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key restaurant_id.'
これはバグですか、それとも私は何か間違ったことをしていますか?助けてくれてありがとう。