我正在使用NSURLSession下载xml文件,然后我想对这些文件进行不同的处理,比如解析它们:
-(void)parseFeed:(NSURL *)url
{
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
NSURLSessionDataTask* task = [FeedSessionManager.sharedManager.session dataTaskWithRequest:request completionHandler:^(NSData* data, NSURLResponse* response, NSError* error)
{
Parser* parser = [[Parser alloc] initWithData:data];
[self.feeds addObjectsFromArray:[parser items]];
}];
[task resume];
}
Parser对象将使用NSXMLParser
解析xml文件。从parseFeed:(NSURL*)url
:
ViewController
Downloader* downloader = [[Downloader alloc] init];
[downloader parseFeed:[NSURL URLWithString:@"http://www.engadget.com/tag/features/rss.xml"]];
NSArray* items = [downloader feeds];
这就是我创建NSURLSession
对象的方式:
-(id)init
{
if(self = [super init])
{
_session = [NSURLSession sessionWithConfiguration:FeedSessionConfiguration.defaultSessionConfiguration delegate:self delegateQueue:nil];
}
return self;
}
当然这种方法对我不起作用。在parseFeed
方法内部,我想等到下载并处理完所有数据。只有这样,我才想访问self.feeds
中的ViewController
数组。
有人能指出我正确的方向吗?或者也许让我指出一种不同的方法?
答案 0 :(得分:1)
我使用过ASIHTTPRequest但现在不再维护但你可以使用AFHTTPClient的操作队列
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:nil];
// Important if only downloading one file at a time
[client.operationQueue setMaxConcurrentOperationCount: 1];
NSArray *videoURLs; // An array of strings you want to download
for (NSString * videoURL in videoURLs) {
// …setup your requests as before
[client enqueueHTTPRequestOperation:downloadRequest];
}