2012-06-27 7 views
0

Это мой образец щебет программа работает, но есть несколько ошибок если я прокрутки вверх или вниз верхней и нижней cellls исчезает несколько раз я получаю сообщение об ошибке сказав:При прокрутке в моих UITableView клетки исчезают

BAD ДОСТУПА КОД это происходит на этой строке

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 

ответ

1

Обнаружил ответ Мое приложение не поддерживает ARC, потому что я не проверял, используем ли мы сохранение в NSJSONSerialization, ошибка исправлена.

tweets = [[NSJSONSerialization JSONObjectWithData:dataURL 
                 options:kNilOptions 
                 error:&error] retain]; 
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. К ним относятся ячейки, которые не отображаются на экране.

+0

ОК, я вернулся twitter.count, теперь я не могу подсчитать BAD ACCESS Error! – Fara

+0

В какой строке вы принимаете ошибку? – Peter

+0

NSDictionary * tweet = [твиты objectAtIndex: indexPath.row]; – Fara

0

Почему numberOfRowsInSection жестко закодирован до 11?

Также вы должны иметь [self.tableView reloadData] после того, как массив твиты устанавливается в fetchTweets

+0

Я использую UIViewController Fara

+0

, который не имеет отношения к тому, что я предложил, так что вы пытаетесь сказать? Насколько я могу сказать в настоящее время, tableview не будет знать, что массив обновлен после получения твитов. – Dima

+0

Свойство 'tableView' не найдено на объекте типа 'TableViewViewController *' – Fara

0

Почему вы не просто раскомментировать return tweets.count; в методе numberOfRowsInSection?

Смежные вопросы