UITableView проблема перезагрузки данных в UITabBar - PullRequest
1 голос
/ 08 января 2010

У меня есть приложение tabBar, которое имеет ResultsNavController как 1 из Nav Controller моего tabBar, контроллером представления является ResultsViewController, и мой tableViewPtr подключен к tableView в IB, который находится в главном окне. Xib ResultsNavController / ResultsViewController / View / tableView.

После перехода на другую вкладку для записи в PureFun.plist нажатие на представление результатов не приводит к немедленной перезагрузке таблицы с новым PureFun.plist. PureFun.plist был успешно написан после того, как я проверил.

- (void)viewWillAppear:(BOOL)animated {  
    [self.tableViewPtr reloadData];

}
#pragma mark Table view methods

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        return 1;
    }


    // Customize the number of rows in the table view.
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [resultsDataArray count];
    }
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        static NSString *CellIdentifier = @"ResultsCellIdentifier";
        UILabel *scoreStrLabel;
        UILabel *dateStrLabel;
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {

            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                           reuseIdentifier:CellIdentifier] autorelease];
            dateStrLabel = [[[UILabel alloc] initWithFrame:CGRectMake(10,5.0,200,43)] autorelease];
            dateStrLabel.tag = DATESTR_TAG;
            dateStrLabel.font = [UIFont systemFontOfSize:18.0];
            dateStrLabel.textAlignment = UITextAlignmentLeft;
            dateStrLabel.textColor = [UIColor blackColor];
            [cell.contentView addSubview:dateStrLabel];
            scoreStrLabel = [[[UILabel alloc] initWithFrame:CGRectMake(250,5.0,50,43)] autorelease];
            scoreStrLabel.tag = SCORESTR_TAG;
            scoreStrLabel.font = [UIFont systemFontOfSize:18.0];
            scoreStrLabel.textAlignment = UITextAlignmentRight;
            scoreStrLabel.textColor = [UIColor blackColor];
            [cell.contentView addSubview:scoreStrLabel];




        }
        else {
            scoreStrLabel = (UILabel *)[cell.contentView viewWithTag:SCORESTR_TAG];
            dateStrLabel = (UILabel *)[cell.contentView viewWithTag:DATESTR_TAG];

        }
        NSDictionary *dict = [resultsDataArray objectAtIndex:indexPath.row];
        NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
        [formatter setDateFormat:@"h':'mma, EEE d MMM"];
        NSDate *dateTested = [dict objectForKey:@"Date"];
        NSString *dateStr = [formatter stringFromDate:dateTested];
        NSString *scoreStr = [dict objectForKey:@"Score"];  
        scoreStrLabel.text = scoreStr;
        dateStrLabel.text = dateStr;
        return cell;

    }

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
        return 49.1;
    }
- (void)viewDidLoad {

        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:@"PureFun.plist"];
        NSArray *array = [[NSArray alloc] initWithContentsOfFile:myPathDocs];
        self.resultsDataArray = array;
        [array release];

        [super viewDidLoad];
    }

Ответы [ 2 ]

0 голосов
/ 09 января 2010

Я знаю свою проблему.мой массив не был перезагружен в viewWillAppear, поэтому я скопировал установочные коды в viewDidLoad в viewWillAppear, и это решило его.

На заметку со стороны, проблема UItableView может быть вызвана настройкой данных в DataSource и [перезагрузитьДанные], возможно, не главный виновник в этом деле.

0 голосов
/ 08 января 2010

Чтобы отловить изменения текущего контроллера представления в вашем UITabBarController, попробуйте использовать следующий метод UITabBarControllerDelegate:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    // ...
}

Таким образом, вы можете запустить перезагрузку вручную. Иногда сложные комбинации контроллеров представлений могут становиться сложными и трудными для отладки, и не все методы «viewWillAppear:» вызываются так, как думают они.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...