2012-10-31 49 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