The exception is thrown in
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
It complains about out of index. For example, indexPath.row is 8, but the data set is empty.
Troubleshooting
The function is called because somehow UI is being updated. But the data set is empty means the data is in the middle of being refreshed. UI shouldn't be asked to update if data is being refreshed. So need to find out the code causing the UI update.
Root Cause
self.refreshControl.endRefreshing() is called too early in the wrong place of the sequence. Moved it to queryCompletionBlock solve the problem (while refreshing data from iCloud).