【发布时间】:2014-09-19 15:37:40
【问题描述】:
我从零开始学习 iOS 编程。
我希望我的应用从网站中提取 XML。我在想,为了符合 MVC 模式,我应该有一个模型类,它只是提供一种方法来完成它(也许让它也解析 XML 并返回一个数组)。
问题是我找到的所有教程都在视图和控制器的上下文中教授 NSURLSession - 所以编辑 appdelegate,或创建视图控制器等。
我从 Apples 文档中获得了以下方法,我目前在按下按钮时将其作为 IBAction 运行(因此我可以轻松地运行和测试它)。我想让它工作,然后把它放在它自己的类中:
__block NSMutableData *webData;
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *delegateFreeSession = [NSURLSession sessionWithConfiguration:defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
[[delegateFreeSession dataTaskWithURL: [NSURL URLWithString:url] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
NSLog(@"Got response %@ with error %@.\n", response, error);
NSLog(@"DATA:\n%@\nEND DATA\n", [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]);
webData = [[NSMutableData alloc] initWithData:data];
}
]resume];
我的直接问题是:
有人可以解释完成处理程序是如何工作的以及如何让data 离开那里吗?它正在工作,数据正在从网站上获取 xml 并将其记录在控制台上,但是将其复制到 webData 不起作用,它编译但不复制。 (我还在弄清楚为什么 __block 声明允许 webData 首先潜入那里!)
我更大的问题是,如果每个人都认为为这个过程创建一个单独的模型类的想法是个好主意。有没有更好的设计方法?
谢谢!
【问题讨论】:
-
也许你在查找 stackoverflow.com/questions/22609434/…>。那里的答案可能会提示您出了什么问题。
-
我看过那个页面。我已经在使用委托免费会话,所以我不确定它是如何适用的......另外,我的完成处理程序正在执行,我只是不知道如何从中获取数据。
-
“复制”是什么意思?
-
我的意思是
webData = [[NSMutableData alloc] initWithData: data];不会将信息从data复制到webData。我想按值传递,我认为这就是initWithData会做的事情。
标签: ios objective-c objective-c-blocks completionhandler