1

アプリ全体で使用する独自の Request クラスを作成しようとしています。これが私がこれまでに思いついたコードです。

-(IIWRequest *)initAndLaunchWithDictionnary:(NSDictionary *)dictionnary
{
    self=[super init];
    if (self) {
        // Create the request.
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://xxxxx.com/app/"]];

        // Convert data
        SBJsonWriter *jsonWriter = [[SBJsonWriter alloc] init];
        NSString *jsonData = [jsonWriter stringWithObject:dictionnary];
        NSLog(@"jsonData : %@",jsonData);
        NSData *requestData = [jsonData dataUsingEncoding: NSUTF8StringEncoding];
        request.HTTPBody = requestData;

        // This is how we set header fields
        [request setHTTPMethod:@"POST"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
        [request setHTTPBody: requestData];

        // Create url connection and fire request
        NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
        [self activateNetworkActivityIndicator];
        if (connection) {
            NSLog(@"Connection");
        } else {
            NSLog(@"No connection");
        }
    }
    return self;
}

NSURLConnectionDelegate を含めました。終了した、または前述の関数に失敗したなどの接続コールバックを起動したいと思います。すべての目標は、最終的に次のように呼び出すメソッドを 1 つだけ取得することです。

-(IIWRequest *)initAndLaunchWithDictionnary:(NSDictionary *)dictionary inBackgroundWithBlock:^(BOOL succeeded){}

何か案が ?ありがとう !

4

3 に答える 3

1

URL の呼び出しに既存のライブラリの 1 つを使用することはお勧めできません。私が知っている最高のものの 1 つは AFNetworking https://github.com/AFNetworking/AFNetworkingです。多くの例があり、使いやすいので、それを使用する必要があると確信しています.

とにかく、独自のクラスを構築したい場合は、坂本一樹が書いた投稿を読むことをお勧めします

よろしく

于 2014-01-21T16:03:49.390 に答える
0

NSURLSessioniOS 7 を使用している場合は、多くのクラスを使用することをお勧めします。この新しいネットワーク API は本当に驚くほどシンプルです。

とにかく、あなたの質問に答えるには、クラスでコールバックの参照を保持し、サーバーから応答を受け取ったときにそれを呼び出すだけです。

参照を保持するには、次のようにします。

// in your .h file
typedef void (^ResponseBlock)(BOOL success);

// in your .m, create a class extension and put declare the block to use it for callback
@interface MyClass ()
{
    ResponseBlock callback;
}

// You can store reference using equal like this
- (void)myMethodRequestWithResponseBlock:(ResponseBlock)responseBlock
{
    callback = responseBlock;
    // statements
}

// And finally, you call back block simple like this:
callback(success);

繰り返しNSURLSessionますが、可能であれば api を使用すると、作業が簡素化されます。

これがお役に立てば幸いです。乾杯!

于 2014-01-21T16:56:02.990 に答える