Я думаю, что ваша проблема может быть связана с идеей добавления строк перед последней строкой массива. Каждый раз, когда вы добавляете, последняя строка меняется. Если вы можете правильно настроить индексирование, то просто используйте эти индексы в ваших indexPaths, и все это сработает, я думаю:
NSInteger insertPosition = photos.count - 1; // this index will insert just before the last element
for (int i=0; i<3; i++) {
NSString *s = [[NSString alloc] initWithFormat:@"%d",insertPosition]; // not i
[photos insertObject:s atIndex:insertPosition];
NSIndexPath *indexpath = [NSIndexPath indexPathForRow:insertPosition inSection:0];
[indexPaths addObject:indexpath];
insertPosition++; // advance it, because the end of the table just advanced
}
[table beginUpdates];
[table insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
[table endUpdates];
// no need to reload data as @sampage points out