iPhone下载几个文件

时间:2010-05-17 14:10:59

标签: iphone download

在我的应用程序中,我需要下载几个plist。

下载plist我使用NSURLconnection

在我的代码中,我使用带有UIAlertView的{​​{1}},然后在下载完成后,我会在警报中添加一个按钮来解除它。

要下载plist我在我的代码中使用某个UIActivityIndicator设置为plist所在的地址,接下来我使用url cache策略和超时间隔设置NSURL。 然后我将NSURLRequest设置为NSMutableDataNSURL的连接。 在委托NSURLRequest中:我在didReceiveData i处理错误中将数据附加到我的可变数据对象。最后在didFailWithError:我将我的数据序列化为plist,这样我就可以写入我的plist文件,然后发布我的alertview。

我的问题是:如果我有要下载的sevetal文件,我该怎么办,因为每次connectionDidFinishLoading完成时都会调用connectionDidFinishLoading,但我想在所有内容时释放NSURLConnection完了。但是当下载第一个plist时,UiAlert中的代码将会触发。

这是我的代码:

在视图中加载了:

connectionDidFinishLoading

所以,如果我想要下载另一个文件,我将请求连接到哪里,以及如何在下载所有文件时告诉// set the UiAlert in the view did load  NSURL *theUrl = [NSURL URLWithString:@"http://adress.com/plist/myPlist.plist"]; NSURLRequest *theRequest = [NSURLRequest requestWithURL:theUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; self.plistConnection = [[ NSURLConnection alloc] initwithRequest:theRequest delegate:self startImmediatly:YES]; //plistConnection is a NSURLConnection - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {  [incomingPListData appendData:data]; } -(void)connection:(NSURLConnection *)connectionDidFailWithError:(NSError *)error { // handle error here  } -(void)connectionDidFinisloading:(NSURLConnection *) connection {  NSPropertyListFormat format; NSString *serialErrorString;  NSData *plist = [NSPropertyListSerialisation propertyListFromData:incomingPlistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&serialErrorString]; if (serialErrorString) {//error} else { // create path and write plist to path} // change message and title of the alert 解雇代码。

感谢所有

2 个答案:

答案 0 :(得分:0)

您可以迭代要下载的资源数组,并为每个资源分配一个请求。可以将标记设置为连接(例如,数组中URL的索引),您可以在connectionDidFinishLoading中对其进行评估。如果您保存信息,发送哪些请求以及哪些请求已完成,您可以轻松查看是否已加载所有文件。

答案 1 :(得分:0)

我认为未设置提供了一个很好的答案。我知道你没有得到它(你将来有一天),因为我记得自己是编程等新手。

因此,我提供了另一个更简单的选项来评估是否所有下载都已完成。

您只需使用在.h文件中定义的计数器

int activeDownloads;

在您的实施(.m)文件中,无论您何时开始所有下载,请在下载任何内容之前将activeDownloads设置为零

 activeDownloads = 0;

在开始下载之前,您需要增加activeDownloads的数量

++activeDownloads;

如果下载完成或失败,则减少相同的反变量

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { --activeDownloads;}

(如果下载失败,我没有记下被调用的方法......

每次连接完成或失败时,您都必须检查完成或敲击的是最后一个。 你只需检查activeDownloads是否等于零即可。如果是这种情况,您可以将“关闭”按钮添加到AlertView。

此解决方案的缺点是,您无法跟踪哪个连接成功以及哪个连接失败。 (嗯,你是,但是activeDownloads没有帮助你)

希望我能帮忙

欢呼声