2012-03-12 4 views
0

私は現在、自分のパーサークラスを呼び出すコネクションクラスを最初にロードしたときにテーブルビューを設定しようとしています。次にパーサクラス内で、私のViewController元のビューが設定されています。このメソッドは後で使用される配列に渡されます。は、CellForRowAtIndexPathに影響します。

方法は、この方法では、私はその後、

[self.tableView reloadData]; 

を呼び出し、それが(私のロジックを通過するように、私はそれがやりたいと思っていますがリロードcellForRowAtIndexPathで、こののViewControllerで配列変数に配列を渡しますifステートメント)、if ([returnedArray count] != 0){をチェックしてください。スレッドはこのデリゲートメソッドに戻ってこないので、ifステートメントに戻ることはありません。

MORE INFO :)だから、最初にすべての、のtableViewときのViewControllerのロード

:cellForRowAtIndexPathは:と呼ばれ、すべてが完璧に見える私のUITableViewを設定され、それはその後、接続している私のNSURLConnectionメソッドを呼び出します私のサーバーにすべてのデータをダウンロードし、それを私のパーサークラスに渡します。そこから私のパーサーはそのことを分かり、すべてうまくいっています。

これは、コードが私のtableViewで次のようになります。私のパーサクラスのparserDidEndDocumentメソッド内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 

私は戻っMAINVIEWにNSArrayのを渡しています。

- (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:私はブレークポイントでそれをデバッグしているので..私はこのことを知っているなど

そう...うまくいけば、この情報は、あなたが私を助けるのに役立ちます追加:)

+0

これは、画面に表示されているセルをリロードする必要があります。それは全く細胞を再ロードしないのですか? –

+0

いいえ、どのセルも再ロードしていません。メソッドをデバッグしました。そのコードが実行された後は、決してそれには行きません。 –

+1

view(viewDidLoadなど)を単に設定しているときは、reloadDataを呼び出さないでください。テーブル行のセルが要求されたときに、テーブルセルを構成します。テーブルが既に表示されていて、それを更新する必要があるときにreloadDataを呼び出す – jamihash

答えて

0
[self.tableView reloadData]; 

デリゲートメソッドを呼び出します。 そうでない場合は、self.tableViewがリロードするtableViewにリンクされているかどうかを確認できます。

+0

データソースとデリゲートの両方は、インターフェイスビルダー内のテーブルビューにリンクされている... –

+0

ので、 Xcodeを再起動することができます。いつか動作します。 – dhcdht

関連する問題