我正在使用NSURLConnection
从响应中加载数据。它应该工作,委托方法connectionDidFinishLoading具有我需要的数据的连接实例。问题是我想传递一些信息和请求,以便我可以在连接完成加载时获取它:
NSURLConnection
用于获取网址LComposeViewController:composeViewControllerForServiceType
和需要
给它提供服务类型NSURLConnection
一起发送。 我可以使用属性扩展NSURLConnection
吗?这看起来非常严厉。必须有一个“正确的方法”来做到这一点。
非常感谢
答案 0 :(得分:4)
假设由于某些其他原因您不需要基于委托的NSURLConnection
进程版本,这是基于块的版本的一个很好的用例:
- (void)shareContentAtURL:(NSURL *)shareURL viaService:(NSString *)service
{
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:shareURL];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if ([data length] == 0 && error == nil) {
// handle empty response
} else if (error != nil) {
// handle error
} else {
// back to the main thread for UI stuff
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// do whatever you do to get something you want to post from the url content
NSString *postText = [self postTextFromData:data];
// present the compose view
SLComposeViewController *vc = [SLComposeViewController composeViewControllerForServiceType:service];
[vc setInitialText:postText];
[self presentViewController:vc animated:YES];
}];
}
}];
}
由于块可以从周围范围捕获变量,因此您可以在NSURLConnection
的完成块中使用您已经拥有的用户选择服务的任何上下文。
如果您仍然因为某种原因仍然使用基于委托的NSURLConnection
API,您可以随时使用ivar或其他一些状态附加到处理此过程的任何对象:set {{1}或者某些用户选择服务时,一旦从self.serviceType
方法获取内容并准备好显示撰写视图,请回头查看。
答案 1 :(得分:1)
您可以检查URL
实例的NSURLConnection
属性,并通过解析baseURL
的{{1}}或absoluteString
属性来确定服务URL
所有- (ServiceType)serviceTypeForURL:(NSURL *)theURL;
方法都会传递调用NSURLConnectionDelegate
对象 - 所以你可以从
NSURLConnection
或
- (void)connectionDidFinishLoading:(NSURLConnection *)connection