Вы неправильно понимаете, как работает метод cellForRowAtIndexPath:
Таким образом, вы создаете одну ячейку, а затем многократно сбрасываете свойства text, textColor и шрифта, а затем возвращаете одну ячейку.
Ключом к пониманию вашей проблемы является понимание того, что cellForRowAtIndexPath: вызывается несколько раз , один раз для каждой ячейки, которая будет отображаться на экране. Поэтому вместо цикла for () сделайте следующее:
NSDictionary * story = [stories objectAtIndex:[indexPath row]];
[cell setTextColor:[UIColor whiteColor]];
[cell setFont: [UIFont systemFontOfSize:11]];
cell.text = [NSString stringWithFormat:[story objectForKey:@"message"]];
Передаваемый параметр indexPath показывает, как tableView указывает, какую ячейку он запрашивает. Мы используем это, чтобы получить соответствующий словарь истории из вашего массива.
EDIT:
Я также хотел бы отметить, что этот код не совместим с iPhone OS 3.0. В 3.0 SDK внесены изменения в работу UITableViewCell, включая его иерархию представлений. Возможно, вы хотите получить доступ к textLabel ячейки, а затем установить свойства , что , например:
NSDictionary * story = [stories objectAtIndex:[indexPath row]];
[[cell textLabel] setTextColor:[UIColor whiteColor]];
[[cell textLabel] setFont: [UIFont systemFontOfSize:11]];
[[cell textLabel] setText:[NSString stringWithFormat:[story objectForKey:@"message"]]];