2012-03-21 8 views
1

UITableViewは上下にスクロールするとJSON配列のデータのみを表示します。テーブルビューを読み込むと、セルが表示されますが空白になり、上下にスクロールするとデータが表示されます。UITableViewは、上下にスクロールしたときにJSONのデータのみを表示します

スクロールせずにセルにデータを表示するにはどうすればよいですか?

- (void)requestFinished:(ASIHTTPRequest *)request 
{  
    if (request.responseStatusCode == 400) { 
     NSLog(@"Code already used"); 

    } else if (request.responseStatusCode == 403) { 
     NSLog(@"Code already used"); 

    } else if (request.responseStatusCode == 200) { 
     NSLog(@"%@",[request responseString]); 
     NSString *response = [request responseString]; 
     const char *convert = [response UTF8String]; 
     NSString *responseString = [NSString stringWithUTF8String:convert]; 
     responseArray = [responseString JSONValue]; 
     Nrows = [responseArray count]; 

    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    NSDictionary *dict = [responseArray objectAtIndex:indexPath.row]; 
    cell.detailTextLabel.text = [dict objectForKey:@"allfeeds"]; 
    cell.textLabel.adjustsFontSizeToFitWidth = YES; 
    cell.textLabel.font = [UIFont systemFontOfSize:12]; 
    cell.textLabel.minimumFontSize = 10; 
    cell.textLabel.numberOfLines = 4; 
    cell.textLabel.lineBreakMode = UILineBreakModeWordWrap; 
    cell.textLabel.text = [dict objectForKey:@"allfeeds2"]; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    return cell; 
} 
+0

どこにあなたのコードですか? – Bourne

答えて

1

代わりの非同期要求を開始する(非ブロッキング)

[request startAsynchronously]; 

(ブロッキング)同期にそれをやってみ

[request startSynchronously]; 
+0

その魔法のように完了! :)おかげで多くの作業..今[requeststartSynchronously]; –

+0

私はそれが助けてうれしいです:) – Myxtic

0

私は同様の問題を持っていたし、しばらく前に、Appleのデベロッパ・フォーラムで私の答えを得た、これは私の問題を解決:

をあなたが説明した内容から、私は問題があると思うだろうcellForRowAtIndexPath内にある可能性が高く、セルの実際のコンフィグレーションを行う場所は、投稿したコードよりも可能性が高いです。 dequeueReusableCellWithIdentifierを使用すると、既存のセルを元に戻すことができますが、既存の状態は完全にリセットされません。

完全な質問と回答は、ここで見つけることができますが(ログインが必要です):https://devforums.apple.com/message/502483#502483

+0

あなたは私の状態をどのようにリセットするのか教えていただけますか? –

+0

セルで情報の各ビットを変更する必要があります。あなたがタイトル、サブタイトル、および 'accessoryType.UITableViewCellAccessoryCheckmark'を持っているとすれば、描画するすべてのセルに対して、それらの3つを変更する必要があります。いずれかがすべてのセルで同じであっても、それを書き直すだけです。 –

+0

私の場合はjsonからNSArrayを取得しています。テキストラベルと詳細テキストのように、各セルに2つのテキストフィールドがあります。 –

0

これらの問題は、通常のUITableViewキャッシュによって引き起こされる、それはあなたのケースで(同じCellIdentifierと彼の可能なキャッシュされたのUITableViewCellをデキュー - @"細胞")。

テーブルのセルのそれぞれとすべての人のセル識別子を作成してみてください。あなたは次のようにNSIndexPathのPARAMを使用して、この分散を作成することができます。

NSString* cellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row]; 

あなたがデータをロードした後はもちろん、仮定の下で、あなたのセルの内容を変更していないこと。

+0

私はこれを実行しましたが、これは運がありません。テーブルビューを空白にしてスクロールすると値が表示され始め、再び上に行くと残りの部分が表示され始めます。何かをお勧めします –

+0

私は値を表示してstatrdを下にスクロールすると、空白が読み込まれます。 –

2

あなたはあなたの要求を完了し、パフォーマンスとアニメーションの目的のために[self.tableView reloadData];

を呼び出すことを確認して、配列を設定すると、ソースの変更、テーブルビューが自分のデータをリロードしないでください。

関連する問題