перезагрузка источника таблицы при вызове данных из appDelegate - PullRequest
0 голосов
/ 16 октября 2010

У меня есть приложение на основе таблиц, которое хранит данные на сервере MySQL, оно обновляется и записывает данные в nsdictionary для сохранения.Когда вы вносите изменения в данные, таблицу необходимо обновить.Однако, если я добавлю [self tableview reloadData], приложение вылетает при выборе строки.Кто-нибудь есть идея о том, как сделать обновление таблицы происходит?Нужно ли мне отказаться от этого и сделать объект из данных и использовать его?

Спасибо.

  -(void) loadData3;{

    MyAppDelegate *AppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
self.tableDataSource3 = [AppDelegate.data3 objectForKey:@"Rows"];
NSLog(@"AppDelegate.data3 : %@",AppDelegate.data3 );
NSLog(@"self.tableDataSource3 : %@",self.tableDataSource3 );

}

- (void)viewDidLoad {
    [super viewDidLoad]; 
    [self loadData3];
    if(CurrentLevel3 == 0) {
    self.navigationItem.title = @"Family";
}
else 
    self.navigationItem.title = CurrentTitle3;  
}
}


- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

 }

Вот метод cellForRowAtIndexPath.

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...
    NSDictionary *dictionary = [self.tableDataSource3 objectAtIndex:indexPath.row];
    cell.textLabel.text = [dictionary objectForKey:@"Title"];

    return cell;
}

1 Ответ

0 голосов
/ 17 октября 2010

Я согласен с объяснением, что reloadData - правильный путь, и вам нужно найти и исправить ошибку, которая вызывает ваш сбой.

Вот две гигантские вещи, на которые следует обратить внимание:

  1. Убедитесь, что сразу после изменения базы данных вызов numberOfRowsInSection вернет действительное новое значение в результате изменения таблицы.(Я видел, что многие люди пишут о проблемах из-за этого).

  2. Внимательно посмотрите на ваш метод cellForRowAtIndexPath.Помните, что этот метод не только устанавливает данные в ячейках, но также отвечает за переработку ячеек.Я видел много случаев, когда с этим неправильно обращались - и когда данные таблицы впоследствии перезагружались - и ячейки должны быть восстановлены и переназначены - дела идут плохо.Могу поспорить, 99%, что ваша проблема здесь.

...