2012-10-31 2 views
2

메신저 (비누) 웹 서비스를 호출 : 내가 appDelegate.m이 전화하면 잘 작동ASIHTTPRequest 위임

-(void)callWebService:(NSString*)URL:(NSString*)SOAP{ 

    NSURL *url = [NSURL URLWithString:URL]; 
    NSString *SOAPMessage = [NSString stringWithFormat:SOAP]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

    request.shouldAttemptPersistentConnection = NO; 
    [request setValidatesSecureCertificate:NO]; 
    [request setRequestMethod:@"POST"]; 

    [request appendPostData:[SOAPMessage dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setDidFinishSelector:@selector(requestCompleted:)]; 
    [request setDidFailSelector:@selector(requestFailed:)]; 

    [request setDelegate:self]; 
    [request startAsynchronous]; 

} 

-(void)requestCompleted:(ASIHTTPRequest *)r{ 

    NSString *responseString = [r responseString]; 
    NSLog(@"%@",responseString); 

} 

-(void)requestFailed:(ASIHTTPRequest *)r{ 

    NSError *Err = [r error]; 
    NSLog(@"%@",Err); 

} 

, requestCompleted 핸들러가 응답을 던졌습니다 ...하지만 난이 동일한 코드를 사용하는 경우 내 자신의 클래스에서 그것은 나쁜 액세스 오류를 던졌습니다, 내가 생각하기에 나는 위임 할 수 없다는 것을 알았습니다. 만약 내가 setDelegate 포인터 (ID 보낸 사람으로 전달) appdelgate 그것은 작동합니다 (그리고 거기에 처리기가). 그렇다면 왜 내 수업이 자체 이벤트를 처리하지 못합니까? Im 새로운 객관적인 - C 그래서 나는 여기에 중요한 무언가를 놓친 것 같아요. 감사합니다

+0

학급의 .h 파일을 나쁜 (BAD) 액세스가있는 곳에 게시 할 수 있습니까? – applefreak

답변

3

. 또한 해당 클래스는 서비스가 호출되는 동안 해제 할 수 없다는 것을 의미합니다. 당신은 강하고/유지 된 재산이나 뭔가에 "당신 자신의 클래스"의 인스턴스를 저장해야합니다.

+0

물론 이러한 메서드는 같은 클래스에 있습니다. 강한 부동산 조언을 주셔서 감사 드리며, 인스턴스가 더 이상 공개되지 않습니다. 그러나 어떻게 든 requestCompleted와 requestFailed 메소드는 여전히 호출되지 않고있다. – Casper522

+0

여전히 액세스 권한이 떨어지거나 전혀 호출되지 않았습니까? 그들에 중단 점을 설정 했습니까? – Vinnie

+0

인스턴스가 릴리스되지 않으므로 잘못된 액세스가 해결됩니다. 메서드가 호출되고 있습니다. 방금 xcode를 다시 시작하고 작동합니다 (시작 이후이 메서드에 중단 점이 있음). 어쨌든, 강한 재산에 대한 조언을 주셔서 감사합니다. 나는 아직도 objective-c에 대해 배울 많은 시간을 가지고있다. – Casper522

0

당신은 당신의 "자신의 클래스"의 requestCompleted 및 requestFailed이 있어야 할당 해제하는이 코드를 추가 viewWillDisappear

[request setDelegate:nil]; 
0

delegate 전화가 걸려 오는 동안 self이 출시되는지 확인하십시오. 제대로 유지되었는지 확인하십시오.

+0

답장을 보내 주셔서 감사합니다. 이미 해결되었습니다. 문제는 내가 객체에 약한 참조를 가지고있어서 핸들러가 호출되는 동안 해제되었다는 것입니다. :) – Casper522