UIScrollView / UITableView падает при изменении размера кадра - PullRequest
2 голосов
/ 28 июля 2010

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

Поэтому я изменяю размер этого scrollView всякий раз, когда это необходимо, примерно так:

NSInteger offset = -50;
if (self.bannerIsVisible) offset = 50;
CGRect frame = scrollView.frame;
frame.size.height += offset;
scrollView.contentSize = CGSizeMake(frame.size.width * pages, frame.size.height);
scrollView.frame = frame;

Эта последняя строка вызывает у меня проблемы. Иногда все работает просто отлично, и он отлично меняет размер scrollView и всего его содержимого. В других случаях происходит сбой в консоли:

2010-07-27 10:25:31.779 MyAPP[8026:207] -[__NSArrayM tableView:cellForRowAtIndexPath:]: unrecognized selector sent to instance 0x736eb20
2010-07-27 10:25:31.781 MyAPP[8026:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM tableView:cellForRowAtIndexPath:]: unrecognized selector sent to instance 0x736eb20'
*** Call stack at first throw:
(
    0   CoreFoundation                 0x026cb919 __exceptionPreprocess + 185
    1   libobjc.A.dylib                0x028195de objc_exception_throw + 47
    2   CoreFoundation                 0x026cd42b -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                 0x0263d116 ___forwarding___ + 966
    4   CoreFoundation                 0x0263ccd2 _CF_forwarding_prep_0 + 50
    5   UIKit                          0x003a3a3f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 619
    6   UIKit                          0x00399ad2 -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75
    7   UIKit                          0x003ae40c -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561
    8   UIKit                          0x003a60d7 -[UITableView(_UITableViewPrivate) _setNeedsVisibleCellsUpdate:withFrames:] + 372
    9   UIKit                          0x003a37cd -[UITableView setFrame:] + 266
    10  UIKit                          0x00367ae8 -[UIView(Geometry) resizeWithOldSuperviewSize:] + 385
    11  UIKit                          0x0036ba2b -[UIView(Geometry) resizeSubviewsWithOldSize:] + 273
    12  UIKit                          0x00367f79 -[UIView(Geometry) setFrame:] + 497
    13  UIKit                          0x0038085f -[UIScrollView setFrame:] + 617
    14  MyAPP                          0x0000a678 -[MyViewController toggleBanner] + 893

Почему это происходит, и почему только иногда? Если говорить более конкретно, как я могу надежно изменить размер моего scrollView?

1 Ответ

2 голосов
/ 28 июля 2010

Это очень похоже на объект, который был источником данных вашего табличного представления, был освобожден, и поэтому метод делегата был отправлен другому объекту.Это проблема управления памятью, поэтому вы можете попробовать запустить приложение с инструментом Zombies, чтобы проверить, не уловит ли оно проблему.

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