0

asihhtpリクエストを使用して、iOSで画像をアップロードするための複数のリクエストを作成して、サーバーに画像を送信していますが、プログレスバーが原因でアプリケーションが常にクラッシュします。これは私のコードです

                ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlStr]];
                [request appendPostData:postData];
                [request setTag:[[dic objectForKey:@"unique"] integerValue]];
                [request setDelegate:self];
                [request setUploadProgressDelegate:cell.mProgressBar];
                [request setDidFailSelector:@selector(requestFail:)];
                [request setDidFinishSelector:@selector(requestDone:)];
                [request setRequestMethod:@"POST"];
                [request addRequestHeader:@"Content-Type" value:@"text/plain"];
                [request setShouldContinueWhenAppEntersBackground:YES];
                //[myQueue addOperation:request];
                [appDelegate window].userInteractionEnabled = NO;
                [request startAsynchronous];

プログレスバーとラベルがあるカスタムセルがあるので、プロセスが完了すると、バーを非表示にして、完成したラベルを表示します。

ユーザーがテーブルアプリをスクロールしてプログレスバーを使用するとクラッシュする場合の問題

クラッシュ出力

> -[UIProgressView respondsToSelector:]: message sent to deallocated instance 0x10d210c0

カスタムセルコード

    #import <UIKit/UIKit.h>

    @interface CustomProgressBar : UITableViewCell
    {

    }

    @property (retain, nonatomic) IBOutlet UILabel         *mlblCompllrtrlbl;
    @property (retain, nonatomic) IBOutlet UIProgressView  *mProgressBar;
    @property (retain, nonatomic) IBOutlet UIImageView     *mCellImafge;

    @end

カスタムセルコード

    #import "CustomProgressBar.h"

    @implementation CustomProgressBar
    @synthesize mlblCompllrtrlbl;
    @synthesize mProgressBar;
    @synthesize mCellImafge;

    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier
    {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
    }

    - (void)setSelected:(BOOL)selected animated:(BOOL)animated
   {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
   }

   - (void)dealloc 
   {
    [mCellImafge release];
    [mlblCompllrtrlbl release];
    [mProgressBar release];
    [super dealloc];
   }

   @end
4

3 に答える 3

0

どこかでプログレスビューをリリースしている可能性があるので、最初にステートメントを削除します

[UIProgressView リリース];

于 2012-08-08T08:17:13.933 に答える
0

テーブルビューセルは、画面から消えると、解放されるか再利用されます (再利用識別子の設定方法に応じて)。

テーブル ビュー セルとは独立した方法で、何らかの形でリクエストを追跡する必要があります。おそらく、View Controllerに属する NSArray に格納された各リクエストを表す個別のオブジェクト、またはリクエストに必要な寿命と同じ寿命を持つ他のオブジェクトに属するオブジェクトが必要になるでしょう。

于 2012-08-08T10:03:33.017 に答える
0

テーブルのセルは自動解放されるため、テーブルをスクロールするたびにプログレスビューが解放され、その progessView のメソッドにアクセスしようとしている可能性があります

于 2012-08-08T09:57:36.187 に答える