1

NSURLConnection応答からデータをロードするために使用しています。デリゲート メソッド connectionDidFinishLoading には、必要なデータを含む接続インスタンスがあります。問題は、接続の読み込みが完了したときに情報を取得できるように、リクエストとともにいくつかの情報を渡したいことです。

  1. ユーザーは、(Facebook、Twitter、C、D) を介して URL のコンテンツを共有したいと考えています。
  2. NSURLConnectionURLのコンテンツを取得するために使用されます
  3. コンテンツを取得したら、SL フレームワーク S を使用しLComposeViewController:composeViewControllerForServiceType、サービス タイプを指定する必要があります。
  4. この時点で、ステップ 1 でユーザーが選択したサービスがわかりませんNSURLConnection

NSURLConnectionこのためのプロパティで拡張できますか? それは非常に手ごわいようです。これを行うには「正しい方法」が必要です。

どうもありがとう

4

2 に答える 2

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ブロックは周囲のスコープから変数をキャプチャできるため、の完了ブロック内でユーザーがサービスを選択するために既に持っていたコンテキストをそのまま使用できます。

なんらかの理由でまだデリゲートベースのNSURLConnectionAPI を使用している場合は、このプロセスを処理しているオブジェクトにアタッチされた ivar またはその他の状態の一部をいつでも使用できます。self.serviceTypeユーザーがサービスを選択したときに set などを参照してくださいNSURLConnectionDelegateメソッドからコンテンツを取得し、作成ビューを表示する準備ができたら、元に戻ります。

于 2013-01-18T21:44:06.080 に答える
1

URLインスタンスのプロパティをチェックし、またはのプロパティを次のようにNSURLConnection解析することでサービスを決定できます。baseURLabsoluteStringURL- (ServiceType)serviceTypeForURL:(NSURL *)theURL;

すべてのNSURLConnectionDelegateメソッドは呼び出しNSURLConnectionオブジェクトを渡すので、そこから取得できます。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection

また

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

于 2013-01-18T21:22:42.703 に答える