1

次の API 呼び出しがあります。

URL: /api/some-call
Method: PUT
PARAMS: No params

単純な PUT メソッドです。AFNetworking を使用してそれを実行しようとしていますが、残念ながら失敗しています。これが私が今持っているものです:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSMutableURLRequest *req = [httpClient requestWithMethod:@"PUT" path:@"" parameters:nil];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:req];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Success");
} failure: ^(AFHTTPRequestOperation *operatn, NSError *error) {
    NSLog(@"Failure");
}];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:operation];

ただし、これは機能していません。何故ですか?さらに、リクエストには何が含まれているpathはずですか?PUT私はいくつかのことを試しましたが、これが最終的に得られたものであり、正しいものに近いはずです.

最後の質問:AFNetworkingを使用しませんARC。それは、ステートメントautoreleaseの最後にまだ が必要だということですか?NSOperationQueue

編集: ここにエラーがありますNSLog:Failure Error Domain=com.alamofire.networking.error Code=-1011 "Expected status code in (200-299), got 409" UserInfo=0x7a91fb0 {NSErrorFailingURLKey=*the url*/api/some-call, NSLocalizedDescription=Expected status code in (200-299), got 409}

4

1 に答える 1

1

良い。409 エラー コードが表示されます。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.htmlから引用:

10.4.10 409 コンフリクト

リソースの現在の状態と競合するため、要求を完了できませんでした。このコードは、ユーザーが競合を解決してリクエストを再送信できると予想される状況でのみ許可されます。応答本文には十分な情報を含める必要があります

ユーザーが競合の原因を認識するための情報。理想的には、応答エンティティには、ユーザーまたはユーザー エージェントが問題を解決するのに十分な情報が含まれます。ただし、それは不可能な場合があり、必須ではありません。

競合は、PUT 要求への応答で発生する可能性が最も高くなります。たとえば、バージョニングが使用されていて、PUT されているエンティティに、以前の (サードパーティの) 要求によって行われたものと競合するリソースへの変更が含まれていた場合、サーバーは 409 応答を使用して、要求を完了できないことを示す可能性があります。 . この場合、応答エンティティには、応答の Content-Type によって定義された形式で、2 つのバージョン間の相違点のリストが含まれている可能性があります。

これは、コードではなくサーバーが原因でエラーが発生したことを意味します。間違ったパラメーターを指定しない限り。

良い。「PUTにあるはずのパスは何ですか」に関する質問については。通常、サーバーのドメイン名として baseURL を入力します。これは次のようなものです

http://localhost 

次に、パスを次のようにします

@"the/rest/of/the/api/url"

baseURL を切り替えるだけで、開発サーバーと運用サーバーを簡単に切り替えることができます。:)

最後の質問ですが、「AFNetworking は ARC を使用しません。それは、NSOperationQueue ステートメントの最後にまだ自動解放が必要ということですか?」

それはあなたのプロジェクトがAFnetworkingでARCを使用しているか、またはARCなしでAFNetworkingを使用していることを意味しますか?

AFNetworking を使用する ARC の場合は、その必要はありません。これを見て ください https://github.com/AFNetworking/AFNetworking#arc-support

AFNetworking を使用する非 ARC の場合、基本的にすべてのメモリ管理を自分で行う必要があります。:) さらに情報が必要な場合は、もう一度連絡してください。それに応じて編集します。:)

私が何らかの形で助けてくれることを願っています。

于 2012-06-12T05:25:55.863 に答える