2011-04-12 63 views
0

我有一个大问题,我需要你的帮助。这里就是我需要完成:NSURLConnection线程问题

  1. 用户选择从 的TableView
  2. 一个新视图控制器在 的NavigationController推一排,只有 显示“加载”消息
  3. 同时一些数据从 XML文件(通过HTTP)
  4. 当数据已被读出,一个 NSUConnection被用于从一个URL加载 图像(此URL是DAT的一部分 读一个)
  5. 尽管图像仍在加载, 其它数据被显示在 屏幕上
  6. 的图像已被下载并是 中所示,在完成的 外观视图

大问题是我不能一起使用detachNewThreadSelectorNSURLConnection

那么我该如何为此做一个解决方法?你会如何做到这一点?

非常感谢你!

回答

0

我会使用NSTimer来解决使用detachNewThreadSelector和NSURLConnection在一起的问题。


我也有类似的情形,其中有一个下载进度的UIViewController显示,直到文件中获取完整的,这里是我做的:

  • 我画一个装载视图包含一个活动指示灯,例如。
  • 我初始化一个NSTimer来继续检查文件是否完整。
  • 我打电话给包含下载逻辑的方法。

[1]

-(void) vManageFileRequest 
{  
    [self.oFilesManager vGetSingleFileRequest]; 

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(vValidateFileRequest) userInfo:nil repeats:NO]]; 
} 

[2]

[self performSelectorOnMainThread:@selector(vManageFileRequest) withObject:nil waitUntilDone:NO]; 
+0

请你能不能有点更加明确?我不需要代码,我只是想了解你的想法! – Abramodj 2011-04-12 12:21:22

+0

我明白你的答案,但是如果我在由NSTimer调用的方法内部启动NSURLConnection,该连接不起作用。这与从分离线程开始它是一样的 – Abramodj 2011-04-12 13:04:14

+0

在初始化NSTimer之前不启动NSURLConnection NSTimer仅用于检查进程是否完成。 – 2011-04-12 13:16:30

0

您可以使用下面的方法......(如果你使用的是异步请求)

当你的应用程序进来- (void)connectionDidFinishLoading:(NSURLConnection *)connection ...加入NSOperationQueue一个NSInvocationOperation对象(你可以在应用程序级处理,通过合成的appDelegate它)..

创建NSInvocationOperation如下..(在connectionDidFinishLoading

NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(parseIt) object:nil]; 

[appDelegate.operationQueue addOperation:operation]; 
[operation release]; 




-(void) parseIt 
{ 
    //ask for parsing stuff....what you have earlier wrote directly in connectionDidFinishLoading 
} 

感谢,

+0

嗨Ravin,谢谢你的回应。我的问题是没有调用“connectionDidFinishLoading”方法!我的意思是,如果我在分离线程内部启动连接,则不会调用 – Abramodj 2011-04-12 13:00:30

+0

嗨,在上面的建议中,我也使用线程(与抽象层),因为异步请求主线程不会被阻塞。所以不是在分离的线程中启动连接,而是在主线程中启动它,然后在它工作之后。 – Ravin 2011-04-12 13:03:33

+0

但是我无法在主线程中启动NSURLConnection,因为我需要在解析XML之后启动它。我怎样才能在主线程中启动NSURLConnection而不执行主线程中的XML解析?也许它不清楚,但NSURLConnection的URL包含在XML中! – Abramodj 2011-04-12 13:08:59