4

だから私は次のことをする必要があるiPhoneアプリケーションを持っています:

  1. 複数の文字列と最大5つの画像(メモリに保存)をRoRWebアプリケーションに投稿します
  2. 返されたJSONを解析します。これには、いくつかの文字列とURLの配列が含まれます(それぞれが、アップロードされた画像がWebサイトで見つかる場所を表します)。

質問:

  1. これはThree20で実行できますか(他の目的で使用しているので便利です)?もしそうなら、どのように?

  2. Three20で実行できない場合、ASIHttpRequestを使用してどのように実行できますか?それとも、それがより良いオプションである場合、SDKに何かが組み込まれていますか?

どうもありがとう

4

2 に答える 2

4

残念ながら、ウェブ上にはthree20のチュートリアルや優れたドキュメントがたくさんありません...それで、私が最終的に物事を機能させる方法は次のとおりです。

- (void) sendToWebsite {

    NSString* url = [[NSString stringWithFormat:kRequestURLPath, self.entityId] stringByAppendingString:@".json"] ;

    // Prep. the request
    TTURLRequest* request = [TTURLRequest requestWithURL: url delegate: self];
    request.httpMethod = @"POST";
    request.cachePolicy = TTURLRequestCachePolicyNoCache; 

    // Response will be JSON ... BUT WHY DO I NEED TO DO THIS HERE???
    request.response = [[[TTURLJSONResponse alloc] init] autorelease];

    // Set a header value
    [request setValue:[[UIDevice currentDevice] uniqueIdentifier] forHTTPHeaderField:@"Device-UID"];

    // Post a string
    [request.parameters setObject:self.entity_title forKey:@"entity_title"];

    // Post some images
        for (int i = 0; i < [self.photos count]; i++) {
        // IS IT POSSIBLE TO ADD A PARAM NAME SO I CAN LOOK FOR THE SAME NAME
        // IN THE WEB APPLICATION REGARDLESS OF FILENAME???
        [request addFile:UIImagePNGRepresentation([self.winnerImages objectAtIndex:i]) 
                mimeType:@"image/png" 
                fileName:[NSString stringWithFormat:@"photo_%i.png", i]];
    }

        // You rails guys will know what this is for
        [request.parameters setObject:@"put" forKey:@"_method"];

        // Send the request
    [request sendSynchronously];

}

私がまだ理解していない(または問題があると思う)こと:

  1. 投稿されたファイルの場合、パラメータ名とファイル名の両方を含めるにはどうすればよいですか?
  2. request.response =を何にでも設定する目的は何ですか?わかりません。
于 2010-05-18T18:11:38.690 に答える
1

回答#2:リクエストを送信する前に、レスポンスのハンドラーを提供する必要があります。TTURLJSONResponseこれは実際のレスポンスではありませんが、レスポンスを処理する責任があります。これは、文字列とURLの配列に対する応答を処理する場所です。

これは実際にTTURLResponseは、次の実装方法を定義するというプロトコルです。

/**
 * Processes the data from a successful request and determines if it is valid.
 *
 * If the data is not valid, return an error. The data will not be cached if there is an error.
 *
 * @param  request    The request this response is bound to.
 * @param  response   The response object, useful for getting the status code.
 * @param  data       The data received from the TTURLRequest.
 * @return NSError if there was an error parsing the data. nil otherwise.
 *
 * @required
 */
- (NSError*)request:(TTURLRequest*)request 
            processResponse:(NSHTTPURLResponse*)response
            data:(id)data;

ハンドラーとして選択TTURLJSONResponseしました。これは、独自の記述のヘルプを探すための簡単な実装です。

于 2011-02-21T17:02:50.083 に答える