added setNeedsReload which handles calling reloadData in the next event loop