2012-09-04 189 views
0

我正在使用Restkit與對象映射,但我似乎得到一個錯誤,說Encountered errors during mapping: Expected an object mapping for class of type 'Rating', provider returned one for 'Error' - 現在我已經設置映射和序列化的評級和錯誤對象,所以我不瞭解它爲什麼會感到困惑。誰能幫忙?Restkit對象映射在映射期間遇到錯誤

這是映射從類返回的

// 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值時,它實際上是空的,這意味着它沒有收到發佈對象......爲什麼是這樣?我的路由似乎沒問題?

回答

0

您是否對後端服務有任何控制權?

如果是這樣,我會改變你發送數據的方式。當你進行「postObject」調用時,唯一預期的迴應是「評級」。我意識到你建立了一個「錯誤」映射,但是因爲你發佈的對象是一個「評級」對象,所以它期待着回來。

這裏更適合的服務將HTTP狀態代碼更改爲403(禁止),或者不是200(確定)。然後你可以在「objectLoader:didFailWithError:」委託方法中處理錯誤。

+0

我確實擁有對後端的控制權,但是如果我給出403的HTTP狀態代碼,我仍然可以提供JSON數據嗎? – Wasim