gpt4 book ai didi

ios - 使用 NSURLSession 异步下载和处理数据

转载 作者:行者123 更新时间:2023-11-29 03:23:18 25 4
gpt4 key购买 nike

我正在使用 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 文件。从 ViewController 调用 parseFeed:(NSURL*)url:

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 方法中,我想等到所有数据下载并处理完毕。只有这样我才想访问 ViewController 中的 self.feeds 数组。

有人可以指出我这样做的正确方向吗?或者也许向我指出一种不同的方法?

最佳答案

我用过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];
}

关于ios - 使用 NSURLSession 异步下载和处理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20798724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com