0

これは動作する私のサンプル twitter プログラムですが、上または下にスクロールするといくつかのエラーが発生し、下のセルが消えることがあります。

BAD ACCESS CODE これはこの行で発生します

NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];

ご意見をお聞かせください

ここに画像の説明を入力

#import "TableViewViewController.h"

@interface TableViewViewController ()

@end

@implementation TableViewViewController

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"tweets array count : %d", tweets.count);
    return tweets.count;
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    NSLog(@"ROW : %d", indexPath.row);

    NSDictionary *tweet = [tweets objectAtIndex:indexPath.row];
    NSString *text = [tweet objectForKey:@"text"];
    NSString *name = [[tweet objectForKey:@"user"] objectForKey:@"name"];

    cell.textLabel.text = text;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", name];
    return cell;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self fetchTweets];
}

- (void)fetchTweets
{

    NSString *twitterURL = [NSString stringWithFormat:@"https://api.twitter.com/1/statuses/public_timeline.json"];    
    NSURL *fullURL = [NSURL URLWithString:twitterURL];

    NSError *error = nil;
    NSData *dataURL = [NSData dataWithContentsOfURL:fullURL options:0 error:&error];

    tweets  = [NSJSONSerialization JSONObjectWithData:dataURL
                                                      options:kNilOptions
                                                        error:&error];    
}

.....

@end
4

4 に答える 4

3

この関数には問題があります。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"tweets array count : %d", tweets.count);
    //return tweets.count;
    return 11; //default returns 20 but only shows 10 indexpath.Row so 11
}

おそらく 11 を返すだけではいけませんtweets。長さが異なる場合はどうでしょうか? テーブル ビューは、配列に存在しないインデックスでセルをフェッチしようとします。tweets.count代わりに戻ってみてください。

もう少し詳しく説明すると、このtableView:numberOfRowsInSection:メソッドの目的は、iOS に画面上にある行数を伝えることではなく、全体にある行数tableViewです。これには、画面に表示されていないセルが含まれます。

于 2012-06-27T17:22:15.167 に答える
1

NSJSONSerialization で保持を使用しているかどうかを確認しなかったため、エラーが修正されました。

 tweets  = [[NSJSONSerialization JSONObjectWithData:dataURL
                                                      options:kNilOptions
                                                        error:&error] retain];
于 2012-06-28T16:47:59.963 に答える
0

numberOfRowsInSectionが11にハードコードされているのはなぜですか?

また、ツイート配列がで設定された後、[self.tableViewreloadData]が必要です。fetchTweets

于 2012-06-27T17:26:36.090 に答える
0

return tweets.count;メソッドのコメントを外してみませんnumberOfRowsInSectionか?

于 2012-06-27T17:30:16.587 に答える