Я быстро отладил ваше тестовое приложение. Я не мог определить основную причину, но кажется, что у вас есть два разных представления таблицы из-за некоторой путаницы в настройке Interface Builder.
Если вы инициализируете исходный массив элементом, cellForRowAtIndexPath вызывается правильно. Если вы изучите экземпляр self.tableView в этом вызове, а затем в последующих вызовах refreshFriendsList, self.tableView указывает на другой экземпляр.
2009-05-17 14:33:07.591 Test3[33580:20b] cellForRowAtIndexPath 0
2009-05-17 14:33:07.594 Test3[33580:20b] self.tableView: <UITableView: 0x52b9b0>
2009-05-17 14:42:36.810 Test3[33762:20b] numberOfRowsInSection: tableView <UITableView: 0x53bcd0>