0

ASIHttpRequestを使用してアプリにドキュメントをダウンロードしています。ダウンロードしたドキュメントごとにプログレスバーを表示しています。ドキュメントはUITableViewに表示されるため、テーブル内のドキュメントセルごとに個別のプログレスバーがあります。ユーザーが[戻る]をクリックすると'そして再びドキュメントテーブルに来て、プログレスバーを表示したいのですが、表示されません。ドキュメントをダウンロードするためのコードは次のとおりです。

- (void)startDownloadingDocumentUsingIndexPath:(NSIndexPath*)indexPath 
{   
    Document *document = [self.objects objectAtIndex:indexPath.row];
    self.ip=indexPath;
    if(isNetworkAvailable)
    {   
        NSString *str = [NSString stringWithFormat:kBody_convertDocToByte,
                         document.docCatId,
                         document.docCatName,
                         document.docChksum,
                         document.docLocation,
                         document.docName,
                         document.docSize,
                         document.docType,
                         document.docUpdated,
                         document.docUpdatedBy,
                         document.documentId
                         ];
        NSMutableData *data = [NSMutableData dataWithData:[str dataUsingEncoding:NSUTF8StringEncoding]];
        self.req = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:kURL]];

        self.req.shouldAttemptPersistentConnection   = NO;
        [self.req setDownloadProgressDelegate:_progress];

        self.req.delegate=APP_DEL;
        self.req.timeOutSeconds=timeOut;
        [self.req setDidFinishSelector:@selector(didFinishDownloadDocument:)];
        [self.req setDidFailSelector:@selector(didFailDownloadDocument:)];
        [self.req addRequestHeader:@"SOAPAction" value:kAction_convertDocToByte];
        [self.req addRequestHeader:@"Content-Type" value:@"text/xml; charset=utf-8"];
        [self.req setPostBody:data];
        [self.req setRequestMethod:@"POST"];
        [self.req setContentLength:[data length]];

        self.req.userInfo=[NSDictionary dictionaryWithObjectsAndKeys:document,@"data",self.objCategory.categoryName,@"catname",self,@"vctr", nil];
        [[APP_DEL nq] addOperation:self.req];
        [[APP_DEL nq] go];
        [APP_DEL nq].showAccurateProgress = YES;
    } 
    else {
        UIAlertView *av=[[UIAlertView alloc] initWithTitle:@"Message" message:@"Please connect to internet & try downloading/updating document later." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [av show];
    }
}

プログレスバーの状態を維持するには、コードにどのような変更を加える必要がありますか?

編集:-ドキュメントテーブルは実際には「子」テーブルです。ユーザーが「親」テーブルの行を選択すると表示されます。「親」テーブルのコードは次のとおりです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.nxt_obj_STMaster2ViewController=[[STMaster2ViewController alloc] initWithNibName:@"STMaster2ViewController" bundle:nil];
    self.nxt_obj_STMaster2ViewController.objCategory=[self.objects objectAtIndex:indexPath.row];
    self.nxt_obj_STMaster2ViewController.managedObjectContext=self.managedObjectContext;
    self.nxt_obj_STMaster2ViewController.detailViewController=self.detailViewController;
    self.nxt_obj_STMaster2ViewController.pre_STMasterViewController=self;

    [tableView deselectRowAtIndexPath:indexPath animated:NO];

    [self.navigationController pushViewController:self.nxt_obj_STMaster2ViewController animated:YES];
}

'子'ドキュメントビューコントローラのviewDidLoadは次のようになります。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(button_refreshTapped:)];

    self.navigationItem.rightBarButtonItem=item;

    UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"left-background.jpg"]];
    [tempImageView setFrame:self.tableView.frame];
    [self.tableView setBackgroundColor:[UIColor clearColor]];
    self.tableView.backgroundView = tempImageView;

    [self startLoadingData:self.detailViewController.liveData];
}
4

1 に答える 1

1

つまり、あなたがしているのは、電話をかけるたびに真新しい光沢のあるビューコントローラを作成することですtableView:didSelectRowAtIndexPath:。代わりに、一度だけ作成し、必要に応じて再表示する必要があります。ただし、すべてのロジックがわからないため、行を変更するときに新しいロジックを作成する必要がある場合があります(その場合は、これ.objCategoryから行うビューコントローラーと同じかどうかも比較する必要があります)。押す。)

これに変更してみてください:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.nxt_obj_STMaster2ViewController)
    {
        self.nxt_obj_STMaster2ViewController=[[STMaster2ViewController alloc] initWithNibName:@"STMaster2ViewController" bundle:nil];
        self.nxt_obj_STMaster2ViewController.managedObjectContext=self.managedObjectContext;
        self.nxt_obj_STMaster2ViewController.detailViewController=self.detailViewController;
        self.nxt_obj_STMaster2ViewController.pre_STMasterViewController=self;
    }

    self.nxt_obj_STMaster2ViewController.objCategory=[self.objects objectAtIndex:indexPath.row];

    [tableView deselectRowAtIndexPath:indexPath animated:NO];

    [self.navigationController pushViewController:self.nxt_obj_STMaster2ViewController animated:YES];
}
于 2013-01-03T02:34:19.027 に答える