2012-10-31 73 views
2

IM使用ASIHTTPRequest來調用Web服務(SOAP):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); 

} 

如果我稱這種現象appDelegate.m,它工作正常,requestCompleted處理器拋出的響應......但是當我使用相同的代碼在我自己的類,它拋出錯誤訪問錯誤,我想通告訴我,我不能委派:自處理響應。如果我setDelegate到appdelgate指針(如ID發送者通過)它的工作原理(和具有的處理程序那裏)。那麼爲什麼我自己的班級不能處理自己的事件呢?我新的Objective-C,所以我想我在這裏失去了一些重要的東西。由於

+0

可以在那裏你找到BAD訪問,請您發表您的類的.h文件中。 – applefreak

回答

3

你必須有你的「自己的類」的requestCompleted和requestFailed。此類也必須存在,這意味着在服務被調用時它不能被釋放。你必須將「你自己的班級」的實例保存在一個強大/保留的屬性或其他東西中。如果您self是越來越發布

+0

當然這些方法都是在同一個班級。感謝強大的財產建議,我檢查和實例不再被釋放。但不知何故,requestCompleted和requestFailed方法仍未被調用。 – Casper522

+0

你仍然得到壞訪問或者他們只是並不是在所有的叫什麼?你有沒有在它們中設置斷點? – Vinnie

+0

由於實例沒有被釋放,所以不好的訪問被解決了。現在正在調用方法,我剛剛重新啓動了xcode並且它可以工作(自從開始以來,我已經在這些方法上有了斷點)。我不知道,爲什麼會發生這種情況,無論如何,感謝您的強烈建議。我仍然有很多要學習Objective-C :) – Casper522

0

添加該代碼的dealloc或viewWillDisappear

[request setDelegate:nil]; 
0

檢查而delegate調用發生。確保它保持正確。

+0

感謝您的回覆,它已經解決了。問題在於我對對象有一個弱引用,所以它在處理程序被調用時被釋放:) – Casper522