1

このメソッドを xcode デバッグ モードで調査すると、リクエストの作成時に奇妙なことがいくつか発生します。

  1. 余分な文字が に追加されますurlString。たとえば、if SessionId = "abc"で始まる行を実行した後NSURLRequest *request...、デバッガーはそれを示しますSessionUrlString = "...session/abc\x03" instead of simply "...session/abc"。これは、デバッガがまだ表示されているにもかかわらずSessionId = "abc"です。どうしてこれなの?
  2. url コンストラクターがそれurlを変数として受け取ったにもかかわらず、要求オブジェクトにはどこにも含まれていないようです。それはどこに行きましたか?オブジェクトのどこかにリクエストオブジェクトに保存されていAFHTTPCLientますか?

    -(NSObject*)makeRequestForSessionUsingId: (NSString *)SessionId{
    
      NSString *baseSessionURLString = [kCwAPIBaseURLString stringByAppendingString:@"session/"];
      NSString *SessionURLString = [baseSessionURLString stringByAppendingString:SessionId];
    
      NSURL *url = [NSURL URLWithString:SessionURLString];
      NSURLRequest *request = [NSURLRequest requestWithURL:url];
      __block NSObject *sessionJSON = [[NSObject alloc] init];
    
      AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        NSLog(@"IP Address: %@", [JSON valueForKeyPath:@"origin"]);
        sessionJSON = JSON;
    } failure:nil];
    
      [operation start];
      return sessionJSON;
    }
    
4

1 に答える 1

0

URL 文字列の末尾の文字の原因はわかりませんが、それを NSLog ステートメントで出力でき、正しく表示される場合は、おそらく正しいでしょう。

NSURLRequestドキュメント- URLで確認できるプロパティに作成した URL を保存します。これは、次のようなものを使用できる必要があることを意味します。

NSLog(@"Request URL: %@", [request URL]);

URLを見るには。

ここで私が目にするより大きな問題は、あなたの返品パターンです。これAFJSONRequestOperationに時間がかかる場合、返される値は空のsessionJSON変数になります。操作を実行する[operation start];と、既定では、指定した値を返す前に完了するまで待機しません。待機させる方法はありますが、ネットワーク要求を待っているスレッドをブロックしたくない場合は、希望よりも長くかかる可能性があります。ここでできることについては、他にもいくつかのオプションがありますが、主に別の方法で考える必要があります。ネットワーク リクエストからのレスポンスに対して行う必要があるほとんどすべてのことは、成功ブロックと失敗ブロックで行う必要があります。このメソッドは、(別のブロックの形式でない限り) 値を返そうとしないでください。これを行ういくつかの方法:

  1. 応答 JSON を@propertyクラスの に保存します。[self foo];それを行った後、保存された応答を使用して必要なことを行うメソッドを呼び出します。
  2. ブロック内で、レスポンス json を渡すメソッドを呼び出します[self foo:JSON]
  3. 応答をオブジェクトとしてNSNotificationを投稿します。
  4. このメソッドにブロックを渡し、それを呼び出して元の呼び出し元に応答を返します。
于 2013-03-25T11:40:03.600 に答える