0

オブジェクト マッピングで Restkit を使用していますがEncountered errors during mapping: Expected an object mapping for class of type 'Rating', provider returned one for 'Error'、Rating オブジェクトと Error オブジェクトの両方にマッピングとシリアライゼーションを設定したため、なぜ混乱しているのかわかりません。誰でも助けることができますか?

これはクラスから返されたマッピングです

// Rating class
+ (RKObjectMapping *)getRestKitObjectMapping {
    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Rating class]];
    [mapping mapAttributes:@"id", @"mics", @"mdate", @"ipaddress", nil];
    [mapping mapKeyPath:@"user_id" toAttribute:@"userID"];
    [mapping mapKeyPath:@"fid" toAttribute:@"fid"];


    return mapping;
}

// Error class
+ (RKObjectMapping *)getRestKitObjectMapping {
    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Error class]];
    [mapping mapKeyPath:@"code" toAttribute:@"code"];
    [mapping mapKeyPath:@"message" toAttribute:@"message"];

    return mapping;
}

これがオブジェクト ルーティングです。

[[RKObjectManager sharedManager].router routeClass:[Rating class] toResourcePath:@"/mic/:id"];
    [[RKObjectManager sharedManager].router routeClass:[Rating class] toResourcePath:@"/mic" forMethod:RKRequestMethodPOST];

[[RKObjectManager sharedManager].mappingProvider setMapping:[Rating getRestKitObjectMapping] forKeyPath:@"ratings"];
    [[RKObjectManager sharedManager].mappingProvider setMapping:[Error getRestKitObjectMapping] forKeyPath:@"error"];

[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[[Rating getRestKitObjectMapping] inverseMapping] forClass:[Rating class]];
    [[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[[Error getRestKitObjectMapping] inverseMapping] forClass:[Error class]];

Rating *rating = [[Rating alloc] init];
[[RKObjectManager sharedManager] postObject:rating delegate:self];

これらはデリゲート メソッドであり、didLoadObjects実際に呼び出されます

- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error
{
    NSLog(@"Object loading failed with error: %@ ----- body: %@", error.localizedDescription, objectLoader.response.bodyAsString);
}


- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects
{
    NSLog(@"Objects received: %@", objects);
    NSLog(@"Respond body: %@", objectLoader.response.bodyAsString);
}

これがJSON応答です

{"error":{"error":1,"code":342,"message":"You have already rated this one"}}

また、REST PHP バックエンドの $_POST 値を見ると、実際には空です。これは、投稿オブジェクトを受け取っていないことを意味します...なぜですか? 私のルーティングは大丈夫ですか?

4

1 に答える 1

0

バックエンド サービスを制御できますか?

もしそうなら、データを送り返す方法を変更します。「postObject」呼び出しを行っている場合、期待される唯一の応答は「評価」です。「エラー」マッピングを設定していることは認識していますが、投稿したオブジェクトは「評価」オブジェクトであるため、それが返されることを期待しています。

ここでより適切なのは、サービスが HTTP ステータス コードを 403 (禁止)、または 200 以外 (OK) に変更することです。その後、「objectLoader:didFailWithError:」デリゲート メソッドでエラーを処理できます。

于 2012-09-06T13:49:04.113 に答える