Странный сбой, связанный с перезагрузкой самой таблицы - PullRequest
0 голосов
/ 27 октября 2011

Я только использую -reloadData для перезагрузки моей таблицы, но по какой-то причине она вылетает каждый раз, когда мы загружаем эту таблицу.Это только одна из многих таблиц в приложении, которые обрабатываются одним и тем же суперклассом контроллера вида:

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                     0x321effbc objc_msgSend + 16
1   UIKit                               0x31abd9c4 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 540
2   UIKit                               0x31abcaa2 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1070
3   UIKit                               0x31abc22c -[UITableView layoutSubviews] + 200
4   UIKit                               0x31a60d44 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 176
5   CoreFoundation                      0x36de4224 -[NSObject performSelector:withObject:] + 36
6   QuartzCore                          0x317ab37a -[CALayer layoutSublayers] + 210
7   QuartzCore                          0x317aaf92 CA::Layer::layout_if_needed(CA::Transaction*) + 210
8   QuartzCore                          0x317af114 CA::Context::commit_transaction(CA::Transaction*) + 220
9   QuartzCore                          0x317aee50 CA::Transaction::commit() + 308
10  QuartzCore                          0x317a6d7e CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 50
11  CoreFoundation                      0x36e59b44 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 12
12  CoreFoundation                      0x36e57d80 __CFRunLoopDoObservers + 252
13  CoreFoundation                      0x36e580da __CFRunLoopRun + 754
14  CoreFoundation                      0x36ddb4d6 CFRunLoopRunSpecific + 294
15  CoreFoundation                      0x36ddb39e CFRunLoopRunInMode + 98
16  GraphicsServices                    0x32ab6fe6 GSEventRunModal + 150
17  UIKit                               0x31a8b73c UIApplicationMain + 1084

Ни один из шагов в трассировке стека не взят из нашего кода напрямую, поэтому я потерян.С чего бы это здесь разбилось?

Ответы [ 2 ]

2 голосов
/ 10 августа 2012

Убедитесь, что делегат и источник данных вашего TableView установлены в nil в методах dealloc для viewControllers.У меня было то же самое, когда система пыталась вызвать CellForRow .... для уничтоженной таблицы.

1 голос
/ 20 августа 2012

Я столкнулся с этой идентичной трассировкой, используя перо для создания экземпляра ячейки строки, и обнаружил, что случайно создавал ячейку из неверной ссылки на кончик.Я создавал эту ячейку примерно так в обратном вызове cellForRowAtIndexPath делегата источника данных таблицы:

static NSString *CellIdentifier = @"CustomCellIdentifier";
CustomCell *cell = (CustomCell*)[aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
{
    [self.cellNib instantiateWithOwner:self options:nil];
    cell = tmpCell;
    self.tmpCell = nil;
}

Чтобы исправить, я убедился, что в viewDidLoad я создал cellNib:

self.cellNib = [UINib nibWithNibName:@"CustomCellNib" bundle:nil];

И вviewDidUnload, убить ссылку на него (это самый важный шаг):

self.cellNib = nil;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...