2013-01-14 3 views
0

저는이 문제로 정말 어려움을 겪고 있습니다. Restkit을 사용하여 웹 서비스에 액세스하고 있습니다. 대부분의 작업은 정상적으로 작동하지만 처음 두 개 인 intializeDevice와 insertNewPatron은 작동하지 않습니다. 이러한 경우 비동기 요청이 시작되지만 대리자 메서드는 호출되지 않습니다. 서버를 점검했는데 이러한 호출이 이루어 졌다는 증거는 없습니다. 나는 그들이 작동하지 않는 이러한 작업에 대해 다른 점을 말할 수 없습니다. 여기에 호출하는 클래스는 다음과 같습니다Restkit : RKRequest 대리인이 호출되지 않았습니다.

-(id)initForController:(UIViewController *)viewController{ 
    self.vc=viewController; 
    NSString *baseURL = @"https://xxxxxxxxx/APNS_WebService/rest/operations/"; 
    NSURL *url=[NSURL URLWithString:baseURL]; 

    client = [RKClient clientWithBaseURL:url]; 
    client.disableCertificateValidation=YES; 

    return self; 
} 

-(void)insertNewPatronWithCard:(NSString *)cardNumber PIN:(NSString *)pin NickName:(NSString *)nickname Device:(NSString *)deviceID{ 


    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/insertNewPatron?cardNumber=%@&pin=%@&nickname=%@&deviceID=%@",cardNumber,pin,nickname,deviceID]]; 
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"insertNewPatron" forKey:@"operation"]; 
    request.params=params; 
    request.delegate=self; 
    [request sendAsynchronously]; 


} 

-(void)initializeDeviceWithID:(NSString *)deviceID{ 



    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/initializeDevice?deviceID=%@",deviceID]]; 
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"initializeDevice" forKey:@"operation"]; 
    request.params=params; 
    request.delegate=self; 
    [request sendAsynchronously]; 


} 

-(void)updateDevicePreferencesWithDeviceID:(NSString *)deviceID DueDateNotice:(NSString *)dueDateNotice HoldsNotice:(NSString *)holdsNotice EventNotice:(NSString *)eventNotice{ 


    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/updateDevicePreferences?deviceID=%@&dueDateNotice=%@&holdsNotice=%@&eventNotice=%@",deviceID,dueDateNotice,holdsNotice,eventNotice]]; 
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"updateDevicePreferences" forKey:@"operation"]; 
    request.params=params; 
    request.delegate=self; 
    [request sendAsynchronously]; 


} 

-(void)removeUserWithCard:(NSString *)cardNumber{ 


    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/removeUser?cardNumber=%@",cardNumber]]; 
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"removeUser" forKey:@"operation"]; 
    request.params=params; 
    request.delegate=self; 
    [request sendAsynchronously]; 


} 

-(void)addEventWithDevice:(NSString *)deviceID EventID:(NSString *)eventID{ 



    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/addEvent?deviceID=%@&eventID=%@",deviceID,eventID]]; 
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"addEvent" forKey:@"operation"]; 
    request.params=params; 
    request.delegate=self; 
    [request send]; 


} 

-(void)removeEventWithDevice:(NSString *)deviceID EventID:(NSString *)eventID{ 


    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/removeEvent?deviceID=%@&eventID=%@",deviceID,eventID]]; 
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"removeEvent" forKey:@"operation"]; 
    request.params=params; 
    request.delegate=self; 
    [request sendAsynchronously]; 

} 

-(void)removeAllEventsWithDevice:(NSString *)deviceID{ 


    request = [client requestWithResourcePath:[NSString stringWithFormat:@"/removeAllEvents?deviceID=%@",deviceID]]; 
    request.delegate=self; 
    NSDictionary *params = [NSDictionary dictionaryWithObject:@"removeAllEvents" forKey:@"operation"]; 
    request.params=params; 

    [request sendAsynchronously]; 


} 

내가 작동하지 않습니다 조작의 경우, Restkit 로깅에, 나는 "준비하는 URLRequest를 GET"라는 메시지가 있음을 알 아닌 한 그 작동하는 작업에서 볼 수있는 "요청 진행 중"이라고 말합니다.

+0

모든 변수가 올바른지 중단 점을 확인 했습니까? 아무도없는 대표자 또는 누락 된 것이 있습니까? 격리 된 요청을하고 있습니까, 아니면 다른 통화와 동시에 한 요청이 만들어지고 있습니까? 귀하의 전화 중 하나가 그 과정에서 대의원을 잃어 버릴 가능성이 있습니다. 경쟁 조건을 피하기 위해 비동기 요청에 대한 위임 패러다임 대신 블록을 사용하는 것이 좋습니다. – clopez

+0

이것은 좋은 생각입니다. 블록을 사용하도록 다시 디자인 해 보겠습니다. 그러나 서버가 요청을 수신하지 않는 것 같아서 더 심오한 문제 여야합니다. –

+0

이것은 이유를 완전히 이해하지는 못했지만 트릭을 완료 한 것으로 보입니다. 이것을 대답으로 만들면 받아 들일 것입니다. –

답변

1

모든 변수가 올바른지 중단 점을 확인 했습니까? 아무도없는 대표자 또는 누락 된 것이 있습니까? 격리 된 요청을하고 있습니까, 아니면 다른 통화와 동시에 한 요청이 만들어지고 있습니까?

귀하의 전화 중 하나가 프로세스에서 대리인을 잃어 버릴 가능성이 있습니다. 경쟁 조건을 피하기 위해 비동기 요청에 대한 위임 패러다임 대신 블록을 사용하는 것이 좋습니다.

희망이 있습니다.

+0

실제로 서버가 호출을받지 못하는 이유를 실제로 설명하지는 않지만 블록으로 변경하면이 작업이 가능합니다. 또한 블록을 사용하는 것이 내가하려는 것을 더 잘 디자인 한 방법임을 알게되었습니다. –

+0

코드를 쉽게 읽을 수 있기 때문에 오류를 수정하는 것 외에 블록을 사용하는 것이 좋습니다. – clopez

관련 문제