使用asihttp请求在表中使用进度条进行多个请求

时间:2012-08-08 07:21:49

标签: iphone ios crash asihttprequest

我正在使用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

3 个答案:

答案 0 :(得分:0)

您可能已在某处发布了progressview,因此请先删除该语句

[UIProgressView发布];

答案 1 :(得分:0)

表格单元格是自动释放的,所以每当你滚动表格时,就会发布progressview,你可能正试图访问该progessView的方法

答案 2 :(得分:0)

您的tableviewcell将在屏幕关闭时被释放或重复使用(取决于您如何设置重用标识符)。

您需要以某种方式跟踪您的请求,其方式与表格视图单元格无关。您可能需要一个单独的对象来表示存储在属于视图控制器的NSArray中的每个请求,或者属于与您希望请求具有相同生命周期的其他对象。