繁体   English   中英

是否重新加载表数据会影响cellForRowAtIndexPath

[英]does reload tabledata affect cellForRowAtIndexPath

我当前正在尝试设置表视图,当它第一次加载时,我调用连接类,该类依次调用我的解析器类,然后在我的解析器类内部,我在ViewController中调用了一个方法,该方法是要设置的原始视图。 此方法传递给数组,该数组将在以后使用。

该方法将数组传递给此ViewController中的数组变量,然后在此方法中我调用

[self.tableView reloadData];

我想做的是重新加载cellForRowAtIndexPath,以便它将通过我的逻辑(if语句)并检查if ([returnedArray count] != 0){然后做它的事情..但是线程永远不会使它回到此委托方法,它再也不会使其返回到if语句。

更多信息 :)

所以首先,当ViewController加载时

tableView:cellForRowAtIndexPath:被调用并设置我的UITableView看起来都很完美,然后它调用我的NSURLConnection方法,该方法连接到服务器下载所有数据,然后将其传递给解析器类。 从那里我的解析器开始处理它的事情,一切都很好。

这就是我的tableView:cellForRowAtIndexPath:方法中的代码

//..
 if (indexPath.row == 0){            
            if ([FilterArray count] == 0){
                [cellActivityIndicator startAnimating];
                //-- Start NSURLConnection
                EngineRequests *engineRequests = [[EngineRequests alloc] init];
                [engineRequests initalizePacketVariables];
            }
if ([FilterArray count] != 0){
                [cellActivityIndicator stopAnimating];
                cell.accessoryView = nil; //hides activity indicator

                cell.userInteractionEnabled = YES;
                cell.backgroundColor = [UIColor whiteColor];

                UILabel *label1;
                label1 = (UILabel *)[cell viewWithTag:1];
                label1.textColor = [UIColor darkGrayColor];

                UILabel *label2;
                label2 = (UILabel *)[cell viewWithTag:2];
                label2.textColor = [UIColor darkGrayColor];
//...etc

在解析器类的parserDidEndDocument方法内部,我将NSArray传递回MainView。

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"ISCHECKED",@"T"];
    NSArray *filteredArray = [parsedDataArrayOfDictionaries filteredArrayUsingPredicate:predicate];

//call method in VieController1 to pass array over
    SearchViewController *searchViewController = [[SearchViewController alloc] init];
    [SearchViewController initFilterArray:filteredArray];


}

因此,我回到了VC1和在.h中声明的方法,然后在.m文件中声明了方法

这就是我所拥有的所有代码。

#pragma - Reciver methods
-(void)initFilterArray:(NSArray*)array
{
    //initalise array variable for use in latter views
    FilterArray = array;

    //reload to make cell white
    [self.tableView reloadData];

//    NSLog(@"%@", FilterArray);
}

在调试代码时,线程使之进入该方法并运行所有方法..如果我取消对NSLog的注释,它将显示我的过滤数组和所有内容。 但是由于某种原因,reloadData似乎没有调用tableView:cellForRowAtIndexPath:。我知道这是因为我已经用断点等对其进行了调试。

所以...希望这些添加的信息可以帮助您:)

[self.tableView reloadData];

它将调用委托方法。 如果不是,则可以检查self.tableView是否链接到要重新加载的tableView。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM