Restkit を使用してオブジェクトをサーバーに送り返す場合、画像を添付する場合にのみ、サブオブジェクトのネストされた配列に問題があります。
これは、すべてのリクエストに使用しているマッピングの概要です。
// mapping for post tag details
tagMapping = [RKObjectMapping mappingForClass:[TagObject class]];
[tagMapping mapKeyPath:@"id" toAttribute:@"tagId"];
[tagMapping mapKeyPath:@"name" toAttribute:@"tagName"];
[[RKObjectManager sharedManager].mappingProvider setMapping:tagMapping forKeyPath:@"tags"];
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[tagMapping inverseMapping] forClass:[TagObject class]];
// mapping for posts
poastMapping = [[RKObjectMapping alloc] init];
poastMapping = [RKObjectMapping mappingForClass:[PoastObject class]];
[poastMapping mapKeyPath:@"id" toAttribute:@"poastId"];
[poastMapping mapKeyPath:@"user_id" toAttribute:@"userId"];
[poastMapping mapKeyPath:@"blurb" toAttribute:@"blurb"];
[poastMapping mapKeyPath:@"photo" toAttribute:@"photo"];
[poastMapping mapKeyPath:@"avatar" toAttribute:@"avatar"];
[poastMapping mapKeyPath:@"date_created" toAttribute:@"dateCreated"];
[poastMapping mapKeyPath:@"firstname" toAttribute:@"firstName"];
[poastMapping mapKeyPath:@"lastname" toAttribute:@"lastName"];
[poastMapping mapKeyPath:@"session" toAttribute:@"session"];
[poastMapping mapKeyPath:@"device" toAttribute:@"device"];
[poastMapping mapKeyPath:@"comments" toAttribute:@"iComments"];
[poastMapping mapKeyPath:@"commentcount" toAttribute:@"commentCount"];
[poastMapping mapKeyPath:@"pointcount" toAttribute:@"pointCount"];
[poastMapping mapKeyPath:@"heartcount" toAttribute:@"heartCount"];
[poastMapping mapKeyPath:@"postcount" toAttribute:@"postCount"];
[poastMapping mapKeyPath:@"hearted" toAttribute:@"hearted"];
[poastMapping mapKeyPath:@"total" toAttribute:@"total"];
[poastMapping mapKeyPath:@"tags" toRelationship:@"tags" withMapping:tagMapping];
[[RKObjectManager sharedManager].mappingProvider addObjectMapping:poastMapping];
[[RKObjectManager sharedManager].mappingProvider setMapping:poastMapping forKeyPath:@"posts"];
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[poastMapping inverseMapping] forClass:[PoastObject class]];
そして、これはリクエストを送信するブロックです (特定の変更は、画像が添付されている場合にのみ発生することに注意してください)
[[RKObjectManager sharedManager] sendObject:obj toResourcePath:@"/posts/submit" usingBlock:^(RKObjectLoader *loader) {
loader.targetObject = nil;
loader.delegate = self;
loader.method = RKRequestMethodPOST;
if([obj image]){
RKObjectMapping* serializationMapping = [[[RKObjectManager sharedManager] mappingProvider] serializationMappingForClass:[PoastObject class]];
NSError* error = nil;
NSDictionary* dictionary = [[RKObjectSerializer serializerWithObject:obj mapping:serializationMapping] serializedObject:&error];
RKParams* params = [RKParams paramsWithDictionary:dictionary];
NSData* imageData = UIImagePNGRepresentation([obj image]);
[params setData:imageData MIMEType:@"image/png" forParam:@"image"];
loader.params = params;
}
}];
画像なしでリクエストを送信すると、「tags」配列が期待どおりにタイプ「array」として PHP に到着します。ただし、画像を含むリクエストを送信すると、タグ配列は「文字列」型として取得され、次のようになります。
( { id = 2; name = 科学; }, { id = 4; name = アカデミック; } )