Не видя трассировки стека, держу пари, что это двойное высвобождение выбранной вами ячейки.Вы извлекаете его из tableView таким образом
CustomCell *testcell = [tableView cellForRowAtIndexPath:indexPath];
и не сохраняете его, затем в конце метода вы освобождаете объект, которому вы не владеете
[testcell release];
Затем, когда вы вернетесь и начнете прокручивать, tableView может попытаться выпустить эту ячейку, аварийно завершающую работу из-за двойного выпуска.Только не выпускайте то, что вам не принадлежит (с помощью create, alloc, copy, retain).