2013-06-29 24 views
0

我新的restkit和我有一個問題。我有一個休息服務辦理登機手續。所以我打電話給我的休息服務「Put」 - 請求。看起來像Put:http:.../api/v1/locations/location/[Location-ID]/checkin?userId = [User-ID]。答案是一個,所以我稱之爲checkin-object。在我打電話給另一個服務(Get-Request)後檢查。但獲取請求的新映射結果包括先前的簽入對象。我如何重置/刪除它?不正確第二次請求使用休息套件後的迴應

[self.restHelper checkinUser:[NSNumber numberWithInt:USER_ID] forLocationID:self.selectedLocation success:successBlock failure:failureBlock]; 

映射:

- (void)checkinUser:(NSNumber*) userID forLocationID:(NSNumber *)locationID success:(void (^)(RKObjectRequestOperation *, RKMappingResult *))success failure:(void (^)(RKObjectRequestOperation *, NSError *))failure{ 

RKObjectManager *objectManager = [RKObjectManager sharedManager]; 

RKObjectMapping *userCheckinMapping = [RKObjectMapping mappingForClass:[CheckIN class]]; 
[userCheckinMapping addAttributeMappingsFromDictionary:@{ 
@"locationFullname" : @"locationFullname", 
@"userNameCityCountry" : @"userNameCityCountry", 
@"success" : @"success", 
}]; 

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:userCheckinMapping pathPattern:nil keyPath:@"" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

[objectManager addResponseDescriptor:responseDescriptor]; 

NSString *path = [NSString stringWithFormat:@".../api/v1/locations/location/%@/checkin?userId=%@", locationID,userID]; 

[objectManager putObject:nil path:path parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    success(operation, mappingResult); 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    failure(operation,error); 
}];  

}

下一次調用是這樣的:

-(void)getTracksForLocation:(NSNumber *)locationID withType:(NSString*) type success:(void (^)(RKObjectRequestOperation *, RKMappingResult *))success failure:(void (^)(RKObjectRequestOperation *, NSError *))failure{ 

RKObjectManager *objectManager = [RKObjectManager sharedManager]; 

RKObjectMapping *trackResultsMapping = [RKObjectMapping mappingForClass:[RESTTracksResult class]]; 
[trackResultsMapping addAttributeMappingsFromDictionary:@{ 
@"id" : @"ID", 
@"cued" : @"cued", 
@"marked" : @"marked", 
@"playing": @"playing", 
@"played": @"played", 
@"creditBidSum": @"creditBidSum", 
}]; 

RKObjectMapping *trackMapping = [RKObjectMapping mappingForClass:[RESTTrack class]]; 
[trackMapping addAttributeMappingsFromDictionary:@{ 
//@"id" : @"ID", 
@"name" : @"name", 
@"artistName" : @"artistName", 
@"genre": @"genre", 
@"length": @"length", 
}]; 

RKRelationshipMapping* relationShipMapping = [RKRelationshipMapping relationshipMappingFromKeyPath:@"track" 
                         toKeyPath:@"track" 
                         withMapping:trackMapping]; 

[trackResultsMapping addPropertyMapping:relationShipMapping]; 


RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:trackResultsMapping pathPattern:nil keyPath:@"results" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

[objectManager addResponseDescriptor:responseDescriptor]; 

NSDictionary *trackDictionary = @{ @"type": type}; 

NSString *path = [NSString stringWithFormat:@".../api/v1/locations/location/%@/tracks", locationID ]; 

[objectManager getObjectsAtPath:path parameters:trackDictionary success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    success(operation, mappingResult); 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    failure(operation,error); 
}]; 

}

希望你能幫助我,TY!我也嘗試刪除緩存但它沒有工作!

回答

1

你正在做一些錯誤的事情,而且這意味着當你進行第二次調用時,第一次調用的所有配置都被用來試圖理解第二次響應。

1.

當你使用一個對象管理器,你應該設置基本URL。你可能已經在做這個,很難說。然後,每當你指定一個路徑,它應該是相對於該基地。

2.

當您創建的路徑,不添加的參數。這就是parameters參數用於put和get方法的原因。

3.

如果您使用的sharedManager,你應該做你所有的映射配置的一次。每次調用方法時不要添加其他映射。

4.

當您創建響應描述符,設置路徑模式和關鍵路徑。這是你的主要問題。如果你沒有設置它們,RestKit將總是嘗試使用機架映射來處理每個響應。這將導致您在映射結果中獲取意外的對象,可能贏得部分信息。

+0

ty,這對我有很大幫助。在編程期間,我忘了設置路徑模式。 – gling

相關問題