2012-08-04 80 views
0

我正在從服務器獲取用戶對象。如果請求成功,我得到:RestKit:如何使用不同的映射處理失敗結果

{ user = { 
     User = { id = 1; } 
} } 

如果失敗,我得到:

{ user = false; } 

我在成功的情況下正常工作的映射:[mappingProvider setMapping:userMapping forKeyPath:@"user.User"];

但在故障情況下,我得到以下例外:'NSUnknownKeyException', reason: '[<__NSCFBoolean 0x1c58f78> valueForUndefinedKey:]: this class is not key value coding-compliant for the key User.'我還嘗試將userMapping設置爲關鍵字User的映射關係,以便從user關鍵路徑生成NSDictionary,在那裏沒有喜悅無論是。

處理這個問題的正確方法是什麼?好像我需要兩個不同的映射關鍵字user,並根據是否要將對象解碼爲NSBoolean來選擇哪一個...

回答

0

我會建議RKDynamicObjectMapping。這兩種風格中的一種,應爲你工作:

- (void)setObjectMapping:(RKObjectMapping *)objectMapping whenValueOfKeyPath:(NSString *)keyPath isEqualTo:(id)value; 

+ (RKDynamicObjectMapping *)dynamicMappingUsingBlock:(void(^)(RKDynamicObjectMapping *dynamicMapping))block; 
+0

我給它使用'RKDynamicObjectMapping'一試,但無法弄清楚什麼類型的'(ID)value'預期(它一直在崩潰)。我想我需要一個像'setObjectMapping:whenClassOfKeyPath:isEqualToClass:'' – damian 2012-08-07 09:26:09

0

服務器可能是(希望)返回一個HTTP錯誤代碼,如400等。所以大概Restkit是試圖使用錯誤映射來映射響應。

也許你需要做的是動態對象映射,因爲@Paul說..但應用於錯誤映射。我在這裏留下你一個簡單的錯誤映射,所以你知道我說的是:

RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[RKErrorMessage class]]; 
[errorMapping mapKeyPath:@"msg" toAttribute:@"errorMessage"]; 
[[[RKObjectManager sharedManager] mappingProvider] setErrorMapping:errorMapping];