在我的应用程序中,我需要下载几个plist。
下载plist我使用NSURLconnection
在我的代码中,我使用带有UIAlertView
的{{1}},然后在下载完成后,我会在警报中添加一个按钮来解除它。
要下载plist我在我的代码中使用某个UIActivityIndicator
设置为plist所在的地址,接下来我使用url cache策略和超时间隔设置NSURL
。
然后我将NSURLRequest
设置为NSMutableData
与NSURL
的连接。
在委托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
解雇代码。
感谢所有
答案 0 :(得分:0)
您可以迭代要下载的资源数组,并为每个资源分配一个请求。可以将标记设置为连接(例如,数组中URL的索引),您可以在connectionDidFinishLoading中对其进行评估。如果您保存信息,发送哪些请求以及哪些请求已完成,您可以轻松查看是否已加载所有文件。
答案 1 :(得分:0)
我认为未设置提供了一个很好的答案。我知道你没有得到它(你将来有一天),因为我记得自己是编程等新手。
因此,我提供了另一个更简单的选项来评估是否所有下载都已完成。
您只需使用在.h文件中定义的计数器
int activeDownloads;
在您的实施(.m)文件中,无论您何时开始所有下载,请在下载任何内容之前将activeDownloads
设置为零
activeDownloads = 0;
在开始下载之前,您需要增加activeDownloads的数量
++activeDownloads;
如果下载完成或失败,则减少相同的反变量
- (void)connectionDidFinishLoading:(NSURLConnection *)connection { --activeDownloads;}
(如果下载失败,我没有记下被调用的方法......
每次连接完成或失败时,您都必须检查完成或敲击的是最后一个。
你只需检查activeDownloads
是否等于零即可。如果是这种情况,您可以将“关闭”按钮添加到AlertView。
此解决方案的缺点是,您无法跟踪哪个连接成功以及哪个连接失败。 (嗯,你是,但是activeDownloads
没有帮助你)
欢呼声