当我有一个仍在执行的未决ASIFormDataRequest(作为异步任务启动)并且用户按下“后退”按钮(以弹出视图)时,我的viewController中出现问题。

有什么方法可以停止该异步任务吗?

我已经读过一种叫做“ clearDelegatesAndCancel”的方法,但我不知道它是否是我要寻找的。

谢谢

最佳答案

就是要调用clearDelegatesAndCancel,您必须具有异步运行的ASIFromDataRequest对象的句柄。这意味着您应该将其设置为属性,例如...

@interface MyViewController : UIViewController <ASIHTTPRequestDelegate>
{
    ASIFormDataRequest *theRequest
    ...
}

@property (nonatomic, retain) ASIFormDataRequest *theRequest;


然后,在您的.m文件中,不要声明新的请求对象,只需将formdatarequest分配给该类的iVar:

@synthesize theRequest;

-(void)viewDidLoad  //or whatever
{
    self.theRequest = [ASIFormDataRequest requestWithUrl:myUrl];
    // then configure and fire the request, being sure to set .delegate to self
}

-(void)viewWillDisappear:(BOOL)animated //or whatever
{
   [self.theRequest clearDelegatesAndCancel];
}

 -(void)dealloc
{
    [theRequest release];  //don't not do this.
}


关键是,您需要进行自我设置,以便在异步运行请求时与之对话。

顺便说一句,这确实是一个好习惯。如果您的视图控制器在您的请求返回之前就消失了(例如,通过从UINavController堆栈中弹出),它将尝试在已释放对象上调用委托方法,然后繁荣。

关于iphone - iPhone停止ASIFormDataRequest,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4795233/

10-09 02:21