0

オブジェクトのコレクションを特定の形式の JSON ディクショナリに適切にマップする方法を見つけようとしています。

次のインターフェースを持つオブジェクトがあります(部分的):

@interface Reward : NSObject
...
@property (nonatomic, copy) NSString* title;
@property (nonatomic, copy) NSString* comment;
@property (nonatomic, strong) NSMutableOrderedSet* receivers; //set of User
...
@end

User オブジェクト (部分) は次のとおりです。

@interface User : NSManagedObject
...
@property (nonatomic, strong) NSNumber* userId
...
@end

目標は、 receiversプロパティと共に Reward オブジェクトを POST することです。

title属性とcomment属性で機能する RKObjectMapping を考え出すことはできますが、 receiversコレクションには次の形式が必要です。

"receivers":{"0":"<user_id_of_first_user>", "1":"<user_id_of_second_user>", ...}

私の主な問題は、インデックスをキーとして挿入する方法です。

手動で NSURLRequest HTTPBody を微調整することもできましたが、よりクリーンなRestKitの方法を見つけたいと思っていました。

前もって感謝します。

4

1 に答える 1

1

それをしたい場合は、あなたが言ったように、NSMutableURLRequest を使用し、json で NSString を与える報酬メソッド リクエストを追加する必要があります。この単純なコードは、あなたや私のような他の開発者に役立ちます。

RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[RKObjectManager baseUrl]];
Reward *reward = [[Reward alloc] init];
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Reward class]];
RKResponseDescriptor *desc = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodPOST pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[manager addResponseDescriptor:desc];
RKObjectManager *objectManager = [RKObjectManager sharedManager];
NSMutableURLRequest *request =
[objectManager requestWithObject:reward method:RKRequestMethodPOST path:@"yourpath" parameters:nil];
 NSString *str = [NSString stringWithFormat:@"\"receivers\":%@",reward.request];
[request setHTTPBody:[str dataUsingEncoding:NSUTF8StringEncoding]];
RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[desc]];
[operation setCompletionBlockWithSuccess:success failure:failure];
operation.targetObject = reward;
[operation start];

それが誰かの助けになることを願っています

于 2014-05-22T07:39:37.707 に答える