0

我正在使用ASIHTTPRequest以异步方式获取 URL 的地方编写一个简单的库。我的问题是main我为测试我的库而编写的函数在异步调用完成之前就退出了。

我对 Obj C 和 iPhone 开发非常陌生,任何人都可以建议一种在 main 函数中完成所有请求之前等待的好方法吗?

目前,我的main功能如下所示 -

int main(int argc, char *argv[]) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  IBGApp *ibgapp = [[IBGApp alloc] init];
  IBGLib *ibgl = [[IBGLib alloc] initWithUsername:@"joe" andPassword:@"xxx"];

  // The two method calls below download URLs async.
  [ibgl downloadURL:@"http://yahoo.com/" withRequestDelegate:ibgapp andRequestSelector:@selector(logData:)];
  [ibgl downloadURL:@"http://google.com/" withRequestDelegate:ibgapp andRequestSelector:@selector(logData:)];

  [pool release];
  return 0; // I reach here before the async calls are done.
}

那么等待异步调用完成的最佳方法是什么?我试着让睡眠,但显然不起作用。

4

2 回答 2

2

您还可以告诉 ASIHTTPRequest 对象同步执行这些请求。

[request startSynchronous];
于 2010-05-25T19:14:58.257 回答
1

简单而肮脏的解决方案是在 [pool release] 之​​前添加一个循环;线。某事。像这样:

while(1){
    if ([ibgl requests_finished]){
        break;
    }
}

当然,您需要将 requests_finished 布尔值添加到 IBGLib 类,并在下载完成时使其为真(是)。请记住处理请求中的失败:)。

于 2010-05-25T09:32:17.360 回答