Постоянно заполнять таблицу - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть UITableView, который я хочу обновить методом, вызванным таймером. Теперь у меня есть:

-(void) populateTable {
NSLog(@"done");
NSArray *array = [[NSArray alloc] initWithObjects:@"ob 1",@"ob 2",@"ob 3",nil];
self.listData = array;
[array release];
}


- (void)viewDidLoad {
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(populateTable) userInfo:nil repeats:YES];
[super viewDidLoad];
}

#pragma mark -
#pragma mark Table View Data Source Methods

- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return [self.listData count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
UITableViewCell *cell = [tableView
                         dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
                                  reuseIdentifier:SimpleTableIdentifier] autorelease];
}

NSUInteger row = [indexPath row];
cell.textLabel.text = [listData objectAtIndex:row];
return cell;

 }

Если я положу массив и self.listData = array в viewDidLoad, он будет работать, но не будет повторяться Мой метод populateTable вызывается, но фактически ничего не помещает в таблицу. Это мой первый раз, когда я использую UITableView, поэтому я не знаю, как они работают. Я сделал это много, следуя инструкциям. Как можно использовать метод для заполнения данных?

Ответы [ 3 ]

3 голосов
/ 07 февраля 2011

Вы также должны позвонить reloadData на вашем столе.

0 голосов
/ 07 февраля 2011

Вы должны сообщить вашему представлению о новой записи в массиве.

Что-то вроде

[self.tableView insertRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationFade];

В этом случае indexArray - это массив IndexPath,дает информацию, где вы обновили массив.

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
NSArray *indexArray = [NSArray arrayWithObject:indexPath];  

После этого представление будет называть вас tableView: cellForRowAtIndexPath: метод получения объекта.

btw.IHMO лучше ваша модель NSMutableArray, где вы можете что-то добавить.В вашей реализации populateTable вы просто всегда заменяете свой массив.

PS: вызывайте только reloadData

... при назначении нового источника данных.Перезагрузка табличного представления очищает текущее состояние, включая текущий выбор ... (Справочник по классам UITableView)

0 голосов
/ 07 февраля 2011

Вам необходимо добавить свой таймер в цикл выполнения - сейчас вы создаете объект NSTimer, но, поскольку он никогда не превращается в цикл выполнения, он запускается один раз и останавливается.Попробуйте что-то подобное в вашем viewDidLoad:

NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:2.0
                                                   target:self
                                                 selector:@selector(populateTable)
                                                 userInfo:nil
                                                  repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...