2013-09-29 6 views
1

У меня есть объект Parser, который содержит 15 элементов из Интернета (статей).Содержимое UITableViewCell теряется при прокрутке

Я пытаюсь загрузить эти товары в свои TableView. Моя проблема в том, что у меня есть 8 элементов, видимых при запуске (4-дюймовый симулятор сетчатки), но когда он начинает прокрутку, почти все мое содержимое потеряно, и я не вижу остальных 7 предметов. Не уверен, что я делаю неправильно, это мой код:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    parser = [[Parser alloc] init]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [[parser items] count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ArticleCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ArticleCell"]; 
    Article *article = [parser items][indexPath.row]; 

    cell.title.text = article.title; 
    cell.date.text = article.date; 

    return cell; 
} 

Edit:

Это то, что он показывает при прокрутке, если я вхожу данные перед возвратом ячейки внутри cellRowAtIndexPath:

2013-09-29 13:37:05.341 Inter[3685:a0b] Article for index: 0 . Title: Cagliari-Inter, tutte le curiosità 
; date: (null) . 
2013-09-29 13:37:05.343 Inter[3685:a0b] Article for index: 1 . Title: Cerrone "Oggi abbiamo vinto da squadra" 
; date: (null) . 
2013-09-29 13:37:05.344 Inter[3685:a0b] Article for index: 2 . Title: Le immagini del 10° "Memorial Prisco" 
; date: (null) . 
2013-09-29 13:37:05.345 Inter[3685:a0b] Article for index: 3 . Title: Primavera, Udinese-Inter 0-1 
; date: (null) . 
2013-09-29 13:37:05.345 Inter[3685:a0b] Article for index: 4 . Title: Tutte le immagini della vigilia di Cagliari-Inter 
; date: (null) . 
2013-09-29 13:37:05.346 Inter[3685:a0b] Article for index: 5 . Title: Udinese-Inter Primavera, 0-0 a fine primo tempo 
; date: (null) . 
2013-09-29 13:37:05.347 Inter[3685:a0b] Article for index: 6 . Title: Mazzarri "Rischio buccia di banana in un momento di euforia" 
; date: (null) . 
2013-09-29 13:37:05.348 Inter[3685:a0b] Article for index: 7 . Title: Inter Campus in Bosnia Erzegovina: passi avanti per i progetti a Sarajevo e Domanovici 
; date: (null) . 
2013-09-29 13:37:11.053 Inter[3685:a0b] Article for index: 8 . Title: (null) ; date: (null) . 
2013-09-29 13:37:28.181 Inter[3685:a0b] Article for index: 9 . Title: (null) ; date: (null) . 
2013-09-29 13:37:29.499 Inter[3685:a0b] Article for index: 10 . Title: (null) ; date: (null) . 
2013-09-29 13:37:29.591 Inter[3685:a0b] Article for index: 11 . Title: (null) ; date: (null) . 
2013-09-29 13:37:35.642 Inter[3685:a0b] Article for index: 1 . Title: (null) ; date: (null) . 
2013-09-29 13:37:35.767 Inter[3685:a0b] Article for index: 0 . Title: (null) ; date: (null) . 

Редакция:

Полный код here.

+0

Вы инициализируете название и дату в своей пользовательской ячейке? или вы просто подключаете их из раскадровки? – null

+0

Нет, я просто подключаю их из раскадровки. – Kobe

+0

Странно, что когда я прокручиваю, все мои элементы из массива элементов становятся нулевыми. – Kobe

ответ

3

Try.

+0

такая же проблема также – Kobe

+0

Показать исходный код для Parser определенно поможет. – Unheilig

+0

см. Мое редактирование с моего вопроса – Kobe

0

У меня есть аналогичный выпуск раньше. причина моей проблемы в том, что мой контроллер просмотра освобождается после того, как я просматриваю свой вид таблицы, можете ли вы проверить, есть ли у вас такая же причина?

+0

Будучи новичком в IOS Я не знаю, как это проверить, можете ли вы объяснить? – Kobe

+0

попробуйте добавить - (void) dealloc {NSLog (@ "Ой, мой контроллер просмотра выпущен"); }, чтобы узнать, вызван ли этот метод? – lanbo

+0

Он не освобождается. – Kobe

0

Попробуйте сделать ниже:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString * MyIdentifier = @"ArticleCell"; 
    ArticleCell *cell = [tableView dequeueReusableCellWithIdentifier: MyIdentifier]; 
    Article *article = [parser items][indexPath.row]; 

    cell.title.text = article.title; 
    cell.date.text = article.date; 

    return cell; 
} 
+0

Та же проблема, к сожалению – Kobe

0

Проблема заключается в том, что идентификатор, используемый должен быть статичным строка

Так объявить идентификатор, который statisc и присвоить ему

static NSString *cellId = @"cellIdentifier";  
ArticleCell *cell = [tableView dequeueReusableCellWithIdentifier: cellId]; 

Также убедитесь, что ячейка раскадровки имеет то же значение идентификатора.ie здесь 'cellIdentifier'

+0

Я сделал это, но без эффекта – Kobe

+0

@vBx sure '[parser items]' содержит 15 элементов всегда? –

+0

Да, но после того, как я прокручиваю, все предметы становятся nil – Kobe

1
-(void) ViewDidLoad { 
    [super ViewDidLoad]; 
    parser = [Parser alloc] init]; 

Вы перераспределили и повторно инициализировали парсер, есть ли какая-либо часть кода, который вы перезагружаете данные? Если ваше хранилище данных не будет пустым.

+0

Хм, я нигде не перезаряжаюсь. Я новичок в IOS, так что не могли бы вы дать мне несколько подробностей. – Kobe

+0

Если данные уже внутри, как я подозреваю, просто выньте alloc] init [statement. если нет, вам нужно искать код, который загружает его (это синтаксический анализатор XML) ... выполнить его, а затем [self.tableView reload data]; это будет загружать все, что у вас есть в парсере, в виде таблицы. – Paulo

+0

Ну, parser анализирует некоторый контент xml и сохраняет содержимое в NSMutableArray. в viewCOntroller, если я удалю инициализацию, мое представление таблицы будет пустым. Поэтому я не совсем понимаю, где перезагрузить данные? – Kobe

0

Проверьте, что происходит с [[парсером]] при прокрутке. Я предполагаю, что он уменьшает число, уменьшающее количество строк в вашей таблице.

Возможно, я ошибаюсь, потому что я не знаю, что такое Parser (возможно, ваш пользовательский класс?), Но в случае, если он используется для анализа ответа HTTP, возможно, количество элементов уменьшается, когда синтаксический анализ был выполнен?

Чтобы проверить парсер количества элементов, добавьте следующие строки в Tableview: cellForRowAtIndexPath:

NSLog (@ "парсер количество:% D", parser.items.count);

+0

Это всегда 15, но после прокрутки они становятся нулевыми. – Kobe

+1

Не могли бы вы поставить исходный код Parser в свой вопрос? Также это поможет, если вы предоставили части кода, где вы добавляете элементы в парсер. –

1

Мои предложения:

  1. Пожалуйста, проверьте, если ваша Tableview-х delegate и dataSource настроены правильно. Я не видел этого в вашем коде.
  2. Проверьте, какой класс ячейки зарегистрирован в вашем представлении таблицы. Я имею в виду, что вам нужно использовать tableView registerClass:forCellReuseIdentifier: или registerNib:forCellReuseIdentifier:.

Во всяком случае, я привык работать с графическим интерфейсом без IB или раскадровки (так что я делаю все программно), поэтому вполне возможно, что вам не нужно это делать.

Удачи. изменение свойства из (неатомических, слабых)

NSMutableString *title; 
NSMutableString *date; 

к (неатомический, сильный) должны решить вашу проблему

+0

Я думаю, это сделано, но я не совсем понимаю, когда одна ячейка уходит с экрана, когда прокрутка элемента из моего массива становится нулевым. – Kobe

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