It turns out that I did return the cell after all (as far as cellForRowAtIndexPath: is concerned)
The problem was solved by assigning the tableView.datasource and tableView.delegate to nil in dealloc.
The table view was most likely still pending dealloc when the container view controller was deallocated, and it could not call my cellForRowAtIndexPath implementation. At least, I was able to reproduce the problem (and the fix).