Подтвердить что ты не робот

Ошибка при просмотре прокрутки EXC_Breakpoint

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

RecipeDetailViewController scrollViewDidScroll:]: сообщение отправлено на освобожденный экземпляр 0x15746c40 и оно разбилось.

Я включил NSZombie, и это был код, который он мне дал. До того, как он выдал код exc_bad_access.

Это мой код для ScrollViewDidSCroll

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{


    // Depending on how far the user scrolled, set the new offset.
    // Divide by a hundred so we have a sane value. You could adjust this
    // for different effects.
    // The larger you number divide by, the slower the shadow will change

    float shadowOffset = (scrollView.contentOffset.y/1);

    // Make sure that the offset doesn't exceed 3 or drop below 0.5
    shadowOffset = MIN(MAX(shadowOffset, 0), 0.6);

    //Ensure that the shadow radius is between 1 and 3
    float shadowRadius = MIN(MAX(shadowOffset, 0), 0.6);



    //apply the offset and radius
    self.navigationController.navigationBar.layer.shadowOffset = CGSizeMake(0, shadowOffset);
    self.navigationController.navigationBar.layer.shadowRadius = shadowRadius;
    self.navigationController.navigationBar.layer.shadowColor = [UIColor blackColor].CGColor;
    self.navigationController.navigationBar.layer.shadowOpacity = 0.2;
}
4b9b3361

Ответ 1

Другое (неэлегантное, imo) решение - установить делегат таблицы на nil на dealloc:

- (void)dealloc {
    [_tableView setDelegate:nil];
}

Кажется, это ошибка, но я не могу гарантировать. Я все еще ищу разумное объяснение этому.

Примечание: это, вероятно, относится к любому подклассу UIScrollView, а не только к UITableView.

Ответ 2

Я столкнулся с конкретной ситуацией. Я включил NSZombie, дал мне ту же самую ошибку в ios7.

В viewDidLoad

[self setEdgesForExtendedLayout:UIRectEdgeNone];

Решился мой крах. Вы также можете попробовать из раскадровки отменить выбор Extended EdgesUnder top bars.

см. ответ здесь fooobar.com/questions/410091/...

N.B. Мне все еще остается загадкой, почему метод делегата scrollViewDidScroll вызывается даже после dealloc.

Ответ 3

или если вы просматриваете прокрутку таблицы,

- (void)viewWillDisappear:(BOOL)animated
{
    _table.delegate = nil;
}

В любом случае его странное уведомление о вызове или что-то подобное на dealloc enter image description here