重新加载tabledata会影响cellForRowAtIndexPath

时间:2012-03-12 03:04:32

标签: iphone ios uitableview

我正在尝试设置我的tableview,当它第一次加载时我调用我的连接类,然后调用我的解析器类然后在我的解析器类中我调用我的ViewController中的方法,这是原始视图建立。该方法传递一个将在后面使用的数组。

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

[self.tableView reloadData];

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

更多信息:)

首先,当ViewController加载

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

这就是我的tableView中的代码:cellForRowAtIndexPath:,method

//..
 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,它会显示我的filitered数组和所有内容。但由于某种原因,reloadData似乎没有调用tableView:cellForRowAtIndexPath:..我知道这一点,因为我已经使用断点等调试它。

所以...希望这些附加信息可以帮助你帮助我:)。

1 个答案:

答案 0 :(得分:0)

[self.tableView reloadData];

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