2013-08-01 2 views
1

RESTKit으로 일부 데이터 (특정 웹 사이트의 인증 토큰)를 게시하려고하는데 문제가 있습니다. 메소드를 실행할 때마다 다음과 같이 나타납니다.RESTKit으로 POST 요청을 수행하는 데 문제가 있습니다.

또한 코드에 '호환되지 않는 포인터 유형'경고가 많이 있습니다.

정말 못 생기고 나쁘다. 내 방법은 고쳐주고 도움을 받고 싶다. 버튼을 누를 때 IBAction 메서드 내에서 [self postToken]을 수행합니다. 다른 파일에서 변수 userAuthToken을 얻고 있는데, RESTKit을 사용하지 않는 POST 요청의 json 응답을 사용하여 설정됩니다. 내가 어떻게 성공적으로 알면 그 POST를 RESTKit으로 변환 할 것이다. "userAuthTokenMethod"메소드는 "postToken"메소드와 같은 파일에 있으며, AppDelegate에서 초기화 된 userAuthToken 객체를 사용하여 전역 변수로 사용할 수 있습니다. 나는 '

//Login.h 
#import <Foundation/Foundation.h> 

@interface Login : NSObject 

@property (nonatomic, copy)NSString *token; 

@end 

: 여기

//MappingProvider.h 
#import <Foundation/Foundation.h> 
#import <RestKit/RestKit.h> 

@interface MappingProvider : NSObject 

+(RKMapping *)tokenMapping; 

@end 

//MappingProvider.m 
#import "MappingProvider.h" 
#import <RestKit/RestKit.h> 
#import "Login.h" 

@implementation MappingProvider 

+(RKMapping *)tokenMapping 
{ 
    RKObjectMapping *tokenMapping = [RKObjectMapping mappingForClass:[Login class]]; 
    [tokenMapping addAttributeMappingsFromArray:@[@"token"]]; 
    return tokenMapping; 
} 

@end 

은'토큰 '초기화 로그인 파일에 대한 코드입니다 : 여기
- (void)postToken 
{   
    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Login class]]; 
    [mapping addAttributeMappingsFromDictionary:@{@"token": @"token"}]; 
    NSIndexSet *statusCodeSet = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); 
    RKResponseDescriptor *tokenResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping method:nil pathPattern:nil keyPath:nil statusCodes:statusCodeSet]; 
    RKRequestDescriptor *tokenRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:mapping objectClass:self rootKeyPath:nil method:nil]; 
    [[RKObjectManager sharedManager] addRequestDescriptor:tokenRequestDescriptor]; 
    RKObjectManager *tokenManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"https://websitetest.com/doctors/find"]]; 
    [tokenManager addResponseDescriptor:tokenResponseDescriptor]; 
    [tokenManager addRequestDescriptor:tokenRequestDescriptor]; 
    [tokenManager postObject:[[self userAuthTokenMethod] userAuthToken] path:nil parameters:nil success:nil failure:nil]; 


    NSURL *tokenURL = [NSString stringWithFormat:@"https://websitetest.com/doctors/find?name=%@&location=%@",nameIDTextField.text, locationTextField.text]; 
    NSMutableURLRequest *tokenRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:tokenURL]]; 
    RKObjectManager *tokenObjectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:tokenURL]]; 
    [tokenObjectManager.HTTPClient setDefaultHeader:@"Auth-Token" value:[[self network360Edge] userAuthToken]]; 
    RKObjectRequestOperation *tokenOperation = [[RKObjectRequestOperation alloc] initWithRequest:tokenRequest responseDescriptors:@[tokenResponseDescriptor]]; 
    NSLog(@"Token being POSTed ==> %@", [[self userAuthTokenMethod] userAuthToken]); 
    [tokenOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *result){ 
     NSLog(@"Response for POST request with token ==> %@", [result array]); 
    }failure:nil]; 
    [tokenOperation start]; 
} 

는 MappingProvider라는 내 매핑 공급자 파일에 대한 코드입니다 아주 RESTKit에 새로 도입되었으며 Objective-C로 다소 새로운 것입니다. (약 한 달 동안 코딩을 해왔습니다.) 내 코드를 고치기위한 모든 도움을 주시면 감사하겠습니다.

+0

을하는 데 도움이

RKRequestDescriptor *tokenRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[self class] rootKeyPath:nil method:nil]; 

희망. 오히려 빈 문자열을 사용할 수 있습니다. RKRequestMethodPOST/GET으로 ResponseDescriptor에서 요청 메소드를 설정해보십시오. 또한 RKObjectManager는 공유 클래스이므로 RKObjectManager 및 TokenManager에 설명자를 추가하여 동일한 응답 설명자를 두 번 이상 추가합니다. – execv

+0

[RKObjectManager sharedManager]에 tokenRequestDescriptor를 추가하고있는 행을 삭제하십시오. – execv

+0

나는 exctly 같은 문제가있어, 내가 알고 싶은 당신의 문제가 해결 됐어? – Songlin

답변

0

이 질문은 오래지만, 문제는 요청과 같이, (아래 2 개 라인 참조) 클래스를 지정 디스크립터를 사용하기 때문에 요청, 클래스 사양하지 않고 매핑을 사용한다는 것입니다 :

RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; 

은 아마 당신은 또한

이 라인의 문제 : 더 구체적으로 에서

RKRequestDescriptor *tokenRequestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:mapping objectClass:self rootKeyPath:nil method:nil]; 

방법 objectClass : 자기, 그것은해야 방법 objectClass : [자체 클래스] 또는 공동 필요한 클래스 ntains이 같은 토큰 재산이 난 당신이 ResponseDescriptor에서 키 패스 대신에 무기 호를 사용하지한다고 생각

관련 문제