reloadData вызывается дважды? - PullRequest
0 голосов
/ 09 марта 2011

Я давно искал этот код для своего приложения.Когда пользователь добавляет ALBUM, он добавляет его в массив (listOfItems) в RootViewController.Затем другой класс вызывает его для обновления (reloadData).Просматривая некоторые NSLogs, он выполняет следующие действия:

  • numberOfRowsInSection обновляет количество строк (правильно)
  • cellForRowAtIndexPath отображает строки (NSLog показывает, что listOfItems является правильным)
  • numberOfRowsInSection повторяет и удаляет все новые данные
  • cellForRowAtIndexPath повторяет еще раз, и он показывает все, кроме новых данных

Я понятия не имею, почему этоповторяет - я звоню [self.tableView reloadData]; только один раз.

И я проверил все свои NSTimers, я даже позволил приложению просто сидеть там около минуты, чтобы ничего не показывалось в консоли.

Пожалуйста, помогите!Култон

PS: Если вам нужен какой-либо код, пожалуйста, спросите!


Редактировать: Вот пример NSLog того, что происходит

Number Of Rows: 3
Array: (One, Two, Three)

Текст ячейки: текст одной ячейки: текст две ячейки: три

--- Добавить ячейку "Четыре" ---

Number of Rows: 4
Array: (One, Two, Three, Four)

Number of Rows: 3
Array: (One, Two, Three)

Cell Text: One
Cell Text: Two
Cell Text: Three

Изменить: Полный RootViewContoller.m

REMOVED

PS: Извините за длинный код, но еще раз спасибо!

Ответы [ 4 ]

3 голосов
/ 09 марта 2011

CellForRowAtIndexPath повторяется для каждой ячейки, отображаемой в вашем табличном представлении, требуется больше информации относительно того, где вы размещаете NSLogs.

2 голосов
/ 09 марта 2011

Добавьте точку останова где-нибудь в реализации numberOfRowsInSection. Когда вы нажмете точку останова, переключитесь на представление отладчика и посмотрите на трассировку стека. Сделайте это для обоих звонков, которые вы получаете. Посмотрите в стек, пока не найдете методы, которые принадлежат вам (они выделены жирным шрифтом). Вы должны быть в состоянии выяснить, куда вы звоните reloadData.

Если для попадания в точку останова вы не можете найти какие-либо собственные методы в качестве источника вызова, то, возможно, у вас есть NSTimer или что-то, что вызывает его для вас.

Счастливая отладка:)

1 голос
/ 09 марта 2011

Не уверен, поможет ли это, но попытайтесь превзойти [super viewWillAppear:animated] в viewWillAppear, если у вас это есть в вашем классе. Кажется, это ошибка в новых версиях SDK.

- (void)viewWillAppear:(BOOL)animated {
    //[super viewWillAppear:animated];
}
0 голосов
/ 10 марта 2011

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

...