簡體   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