1

次のタスクを実行するアプリを開発しています。

  1. ギャラリーの画像を取得し、グリッド ビューで表示します。
  2. 画像を選択すると、サーバーにアップロードされます

アップロードには「POST」メソッドを使用します。iPhoneシミュレーターで問題なく動作しています。しかし、iPhone 5 デバイスでは、アップロードの進行後に次のエラーが発生します。

Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x1f0ba650 {NSErrorFailingURLStringKey=http://192.168.1.25/webservices/uploadphoto.php/?user_id=22, NSErrorFailingURLKey=http://192.168.1.25/webservices/uploadphoto.php/?user_id=22, NSLocalizedDescription=The request timed out., NSUnderlyingError=0x1f0a3b60 "The request timed out."}

ここで、アップロードするための私のコード。

    -(void)uploadImageWithStatus:(NSData *)data filenumber:(NSInteger)filenumber{ NSUserDefaults *defaultUser = [NSUserDefaults standardUserDefaults];
        NSString *userId = [defaultUser stringForKey:@"UserId"];

        AFHTTPClient *client= [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",UploadURL,userId]]];
        client.operationQueue.maxConcurrentOperationCount =1;

        //You can add POST parameteres here

        NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:nil];

        NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:nil parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {

            //This is the image
            [formData appendPartWithFileData: data name:@"f" fileName:[NSString stringWithFormat:@"%d_image.jpeg",rand()] mimeType:@"image/jpeg"];

        }];


       NSLog(@"Time out : %f",[request timeoutInterval]);
        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {


            //        NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);

}];
        //Setup Completeion block to return successful or failure
        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSString *response = [operation responseString];
            NSLog(@"response: [%@]",response);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"error: %@", [operation error]);
            if(error.code == -1001){
            UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Error!"
                                                              message:@"The request timed out." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
            [myAlert show];
            }
            //Code to Run if Failed

        }];

        [operation start];

誰かが私を助けることができれば、私はとても感謝しています。ありがとうございます。

4

1 に答える 1

2

表示されるエラーはタイムアウトエラーです。接続しようとしているサーバーがタイムリーに応答できません。

192.168.1.25ローカルIPアドレスに接続しようとしていることに気付きました。開発マシンでローカルにサーバーを実行している可能性がありますが(iPhoneシミュレーターは正常に動作します)、別のネットワーク上にあるため、iPhoneデバイスではこれにアクセスできませんか?

これをテストする最良の方法は、MobileSafariにアクセスしてロードすること192.168.1.25です。それが機能しない場合は、問題がコードにあるのではなく、ネットワークの設定方法にあることがわかります。

于 2013-01-02T09:55:18.597 に答える