2011-06-24 8 views
0

私はasi-http-requestを使用してファイルをサーバーにアップロードしています。 ある時点でクラッシュが始まるまで、私のコードは正常に動作していました。 クラッシュは次の2つの方法で発生します。 - ファイルが正しくアップロードされていて、進行状況が正常に機能していますが、最後まで達してからアプリ全体がクラッシュします。 - ユーザーがアップロードをキャンセルするために「キャンセル」ボタンを押したとき。asi-http-requestを使用してhttp postでiPhoneアプリケーションがクラッシュする

私は、コンソール上でこのエラーを取得する:スレッド1:: は「NSException」 とのインスタンスを投げた後に呼び出さTERMINATEプログラムは、信号を受信:SIGABRT

はこれらは私が見る2つのエラーです。これ以上の情報はありません。

これはコードです:

request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:UPLOAD_URL_DEV]]; 
[request setDelegate:self]; 
[request setFile:videoFile forKey:@"video"]; 
[request setPostValue:longitude forKey:@"longitude"]; 
[request setPostValue:latitude forKey:@"latitude"]; 
[request setPostValue:horizontalAccuracy forKey:@"accuracytHorizontal"]; 
[request setPostValue:verticalAccuracy forKey:@"accuracyVertical"];  
[request setPostValue:context forKey:@"context"]; 
[request setPostValue:[UIDevice currentDevice].uniqueIdentifier forKey:@"deviceId"]; 
NSLog([NSString stringWithFormat:@"Upload Recording time: %@", currentTime]); 
[request setPostValue:currentTime forKey:@"time"]; 
NSLog([NSString stringWithFormat:@"Facebook access token: %@", facebook.accessToken]); 
[request setPostValue:facebook.accessToken forKey:@"accessToken"]; 

NSLog([NSString stringWithFormat:@"Facebook user id: %@", [defaults objectForKey:@"facebook_user_id"]]); 

[request setPostValue:[defaults objectForKey:@"facebook_user_id"] forKey:@"userId"]; 
[request setUploadProgressDelegate:uploadProgress]; 
uploadProgress.progress = 0; 
uploadProgress.hidden = NO; 
labelSendVideo.hidden = NO; 
NSLog(@"Starting async upload"); 
[request startAsynchronous];  

誰が間違っているものを私に言うことはできますか?たぶんそれは記憶の問題ですか?

+0

これは問題ではありませんが、 'NSString'ビットを使わずに' NSLog'を使うことができます。 'NSLog(@" FacebookユーザーID:%@ "、[defaults objectForKey:@" facebook_user_id "]);は完璧に機能します。 – PengOne

+0

'uploadProgress'とは何ですか? –

+0

NSStringに関するアドバイスをありがとう。 「uploadProgress」は進捗コンポーネントです。進歩は途中でうまくいっています。 – bashan

答えて

1

"didFinish ..."と "didFail ..."デリゲートメソッドのコードはありません。

また、デリゲートインスタンス(ここでは「自己」)がダウンロードが完了またはキャンセルされる前に割り当てが解除されていないことを確認してください。

+0

私は委譲メソッドを持っていて、 "要求"オブジェクトは "自己"オブジェクトに作成されています。デリゲートメソッドでパラメータの名前を変更するだけで問題は解決したと思います。以前は:(ASIHTTPRequest *)リクエストでしたが、私はそれを(ASIHTTPRequest *)reqに変更しました。私はそれが "要求"メンバーと衝突したと思います(私は[要求の取り消し]を使うので、グローバルにする必要があります)。 – bashan

+0

ああ..将来このような問題を避けるために、命名規則に関する特定のガイドラインたとえば、クラスのprivate変数の名前が "request_"で、ローカルの名前付けのための "request"が残っていて、その変数がローカルであるか、クラスに属しているということを明確にしている場合。 – Sailesh

+1

承認されたものとしてマークしてください。 –

関連する問題