1

私がrestkitを使用するのはこれが初めてで、自動マッピングに興味があります(そして、おそらく後でCoreDataとの統合にも興味があります)。

現在、GETリクエストを実行し、次のコードを使用してレスポンスを単純なオブジェクトにマッピングすることができました。

RKObjectMapping *myMapping = [[self class] objectMappingForClass:[MyClass class]];
[myMapping mapKeyPath:@"Name" toAttribute:@"name"];
[myMapping mapKeyPath:@"Value" toAttribute:@"value"]; 

....

+ (RKObjectMapping*)objectMappingForClass: (Class)class
{
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:class];
mapping.rootKeyPath = @"Data";

mapping.performKeyValueValidation = NO;
//  mapping.ignoreUnknownKeyPaths = YES;
mapping.setNilForMissingRelationships = YES;
mapping.setDefaultValueForMissingAttributes = YES;

return mapping;
}

次の方法でサーバーからデータを取得します。

RKObjectMapping *defaultPropertiesMapping = [self.objectManager.mappingProvider objectMappingForClass:[MyClass class]];

RKObjectLoader *request = [self.objectManager loaderWithResourcePath:GetDefaultPropertiesURL];
request.objectMapping = defaultPropertiesMapping;

RKResponse *response = [request sendSynchronously];

問題は、応答に対してサーバーがHTTPステータスを使用せず、JSONペイロードの属性を使用することです(ペイロードは次のようになります: { "Status" : "OK", "Data" : { //real payload } }

そのステータス属性を確認するにはどうすればよいですか?

4

1 に答える 1

1

リクエストの送信元のクラスにオブジェクトローダーデリゲートを設定すると、次のメソッドを実装できます。

- (void)objectLoader:(RKObjectLoader *)loader willMapData:(inout __autoreleasing id *)mappableData; {
  if([*mappableData valueForKey:@"Status"] isEqualToString:@"OK"){
    // Do something
  }
}

次に、ステータスの値を確認し、それに応じて応答を処理できます。このメソッドは、オブジェクトがCoreDataにマップされる前に呼び出されます。また、クラスがRKObjectLoaderDelegateプロトコルを採用していることを確認してください。採用していないと、機能しません。

応答からデータを削除したい場合は、次の方法を使用してください。

[*mappableData removeObjectForKey:@"Data"];

* mappableDataから削除されたキーは、オブジェクトマッパーに到達しません。

于 2012-11-07T15:36:20.510 に答える