exc_bad_access on [NSDate timeIntervalSinceReferenceDate] - PullRequest
3 голосов
/ 21 октября 2011

Я получаю странное поведение из [NSDate timeIntervalSinceReferenceDate].

У меня есть следующая функция:

-(void) insertRow{
NSTimeInterval timeNow = [NSDate timeIntervalSinceReferenceDate];
if (timeNow - secondsSinceTableViewScroll <0.5){
    [self insertRow];
    return;
}

NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:[self.itemsToFollow count] - 1];
[self.tableView insertSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic];
}

, которая является обратным вызовом от ASIHTTPRequest requestFinished. Если я ставлюТочка останова в коде работает нормально.Если я просто попробую запустить код, я получу exc_bad_access в строке:

NSTimeInterval timeNow = [NSDate timeIntervalSinceReferenceDate];

secondsSinceTableViewScroll - это ивар, объявленный в заголовке и установленный так:

 secondsSinceTableViewScroll = [NSDate timeIntervalSinceReferenceDate];

Есть идеи, почему я получаю exc_bad_access, когда нет точки останова?

Спасибо

Единственное, что я смог найти

Я проверялвремя, подобное этому:

-(void) insertRow{
end = [NSDate timeIntervalSinceReferenceDate];
if(end-start < 0.05){
    [self insertRow];
    return;
}

NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:[self.itemsToFollow count] - 1];
[self.tableView insertSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic];
}

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

Так что используйте цикл while или, еще лучше, NSTimer.

Спасибо за помощь, хотя

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

Изменение

[self insertRow];

до

[self performSelector:@selector(insertRow) withObject:nil afterDelay:0];
2 голосов
/ 21 октября 2011

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


РЕДАКТИРОВАТЬ: Вы возвращаетесь слишком быстро и переполняете свой стек. Полсекунды «так быстро, как ты можешь себя назвать» очень быстро переполнят ваш стек.

...