滚动我的UITableView单元格正在消失

时间:2012-06-27 17:17:42

标签: objective-c ios

这是我的示例Twitter程序,但有几个错误 如果我向上或向下滚动顶部和底部的细胞有时会消失,我会收到错误说:

BAD ACCESS CODE这一行发生在这一行

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

请建议

enter image description here

#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 个答案:

答案 0 :(得分: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中有多少行。这包括未在屏幕上显示的单元格。

答案 1 :(得分:1)

找到答案我的应用程序不支持ARC,因为我没有检查我们是否在NSJSONSerialization中使用了保留,错误是固定的。

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

答案 2 :(得分:0)

为什么numberOfRowsInSection硬编码为11?

fetchTweets

中设置推文数组后,你应该有[self.tableView reloadData]

答案 3 :(得分:0)

为什么不在return tweets.count;方法中取消注释numberOfRowsInSection