2012-05-25 3 views
0

지금 당장 나는 코드에 대한 엄청난 리팩토링을하고 있으며 Restkit을 사용하는 방식을 통일하고 싶습니다. API 서버와 REST 호출에 RPC 호출을하는 방법을 구분했습니다.RKParams로 API에 게시하고 RestKit을 사용하여 RKObjectMapping으로 응답 매핑하기

REST는 RKClient를 사용하여 만든 objectMapping 및 RPC 호출을 사용하여 호출합니다. 게다가 위임자 대신 블록을 사용하고 있는데 위대한 방법이지만 작동 방식에 대한 의문점이 있습니다.

다음은 객체를 게시하고 대리인을 사용하여 수동으로 매핑을 수행 한 후 params를 전송하지 않는 블록을 사용하는 새 코드입니다.

//This was the old way... 
- (void) upload: (KFMedia *) pic { 

    RKParams* imageParams = [RKParams params]; 
    NSData* imageData = UIImageJPEGRepresentation(pic.image, 0.7f); 
    [imageParams setData:imageData MIMEType:@"image/jpg" forParam:@"FileUpload"]; 

    [[RKClient sharedClient] post:@"/api/upload/" params:imageParams delegate:self]; 

} 

//This is the new way I'm trying... 
- (void) upload: (KFMedia *) pic onLoad:(RKObjectLoaderDidLoadObjectBlock) loadBlock onError:(RKRequestDidFailLoadWithErrorBlock)failBlock{ 

    RKParams* imageParams = [RKParams params]; 
    NSData* imageData = UIImageJPEGRepresentation(pic.image, 0.7f); 
    [imageParams setData:imageData MIMEType:@"image/jpg" forParam:@"FileUpload"]; 

    [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/api/upload/" usingBlock:^(RKObjectLoader *loader) { 

     //Trying to set params here, but it seems that I'm not sending anything :(
     loader.params = imageParams; 
     loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[KFMedia class]]; 
     loader.delegate = self; 
     loader.onDidLoadObject = loadBlock; 
     loader.onDidFailWithError = failBlock; 
     loader.onDidFailLoadWithError = failBlock; 
     loader.onDidLoadResponse = ^(RKResponse *response) { 
      [self fireErrorBlock:failBlock onErrorInResponse:response]; 
     }; 

    }]; 

} 

보내려는 요청에는 본문이 비어 있습니다. 즉, 매개 변수가 보내지 않거나 제대로 설정되지 않았다는 의미입니다. 이 방법을 사용하는 방법에 대한 아이디어가 있습니까?

답변

0

방금 ​​문제가 해결되었습니다. loadObjectsAtResourcePath로 추가 PARAMS를 보내려면 당신은

loader.method = RKRequestMethodPOST; 

코드는 다음과 같다 사용하여 게시물을 강제해야

- (void) upload: (KFMedia *) pic onLoad:(RKObjectLoaderDidLoadObjectBlock) loadBlock onError:(RKRequestDidFailLoadWithErrorBlock)failBlock{ 

    RKParams* imageParams = [RKParams params]; 
    NSData* imageData = UIImageJPEGRepresentation(pic.image, 0.7f); 
    [imageParams setData:imageData MIMEType:@"image/jpg" forParam:@"FileUpload"]; 

    [[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/api/upload/" usingBlock:^(RKObjectLoader *loader) { 

     loader.method = RKRequestMethodPOST; //This line solved the problem 
     loader.params = imageParams; 
     loader.objectMapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[KFMedia class]]; 
     loader.delegate = self; 
     loader.onDidLoadObject = loadBlock; 
     loader.onDidFailWithError = failBlock; 
     loader.onDidFailLoadWithError = failBlock; 
     loader.onDidLoadResponse = ^(RKResponse *response) { 
      [self fireErrorBlock:failBlock onErrorInResponse:response]; 
     }; 

    }]; 

} 
관련 문제