如何使用NSURLConnection实例传递信息,以便我可以从connectionDidFinishLoading获取它

时间:2013-01-18 21:14:18

标签: iphone ios nsurlconnection

我正在使用NSURLConnection从响应中加载数据。它应该工作,委托方法connectionDidFinishLoading具有我需要的数据的连接实例。问题是我想传递一些信息和请求,以便我可以在连接完成加载时获取它:

  1. 用户希望通过(Facebook,Twitter,分享网址内容) C,D)。
  2. NSURLConnection用于获取网址
  3. 的内容
  4. 一旦我有了内容,我就会使用SL框架     S LComposeViewController:composeViewControllerForServiceType和需要     给它提供服务类型
  5. 此时我不知道用户在步骤1中选择了哪些服务。我想将其与NSURLConnection一起发送。
  6. 我可以使用属性扩展NSURLConnection吗?这看起来非常严厉。必须有一个“正确的方法”来做到这一点。

    非常感谢

2 个答案:

答案 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