Как обновить данные таблицы, когда пользователь возвращается на вкладку UITabBarController - PullRequest
2 голосов
/ 19 июля 2011

У меня есть приложение для iPhone (в XCode 4), которое использует стандартный шаблон проекта приложения панели вкладок (UITabBarController).

Мое первое представление имеет UITableView, который получает данные из фида JSON. Вот где контроллер загружает эти данные:

#import "FirstViewController.h"
#import "SBJson.h"
#import "WheelRecord.h"
#import "WheelTableCell.h"
#import "UIImageView+WebCache.h"

@implementation FirstViewController

@synthesize wheels, wheelsTable;

- (NSMutableArray *) wheels {
    if (!wheels) {     
        SBJsonParser *parser = [[SBJsonParser alloc] init];        
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://wheelspotting.com/recent.json"]];            
        NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];            
        NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
        NSArray *wheelData = [parser objectWithString:json_string error:nil];            
        self.wheels = [NSMutableArray array];
        for (NSDictionary *wheel in wheelData)
        {
            WheelRecord *currentWheel = [[[WheelRecord alloc] init] autorelease];
            currentWheel.title = [wheel objectForKey:@"title"];
            currentWheel.smallImage = [wheel objectForKey:@"small_image"];
            currentWheel.mediumImage = [wheel objectForKey:@"medium_image"];
            currentWheel.largeImage = [wheel objectForKey:@"large_image"];                
            [self.wheels addObject:currentWheel];
        }

    }
    return wheels;
}

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

Я пытался установить колеса в nil в viewDidLoad и viewWillAppear, но когда я переключаю вкладки и возвращаюсь к первой вкладке, он никогда не обновляется (я изменяю данные для проверки).

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

Я не верю, что ViewDidLoad будет вызван снова, так как все контроллеры представления будут присутствовать всегда. Я бы подумал, что viewWillAppear должен был быть вызван, хотя.

Глупый вопрос, но вы уверены, что данные не обновляются? Возможно, это просто представление вашей таблицы, которое не обновляется новыми данными? Вы вызываете [yourTableView reloadData] где-то из вашего метода viewWillAppear или viewDidAppear? В качестве альтернативы, вставьте [yourTableView reloadData] непосредственно перед концом вашего if-кода, например,

       [self.wheels addObject:currentWheel];
       [yourTableView reloadData]; // where yourTableView is the pointer to your table view
    }

Контроллеры панели вкладок могут быть неудобными вещами, я знаю, что лично провел много часов, ругаясь с ними. Одна вещь, которую нужно попробовать, если вы каким-либо образом подклассифицировали UIViewController или используете UITableViewController или UINavigationController, убедитесь, что вы установили правильный тип объекта в инспекторе для соответствующей вкладки - у меня не было никаких проблем из-за забывания чтобы сделать это в прошлом.

0 голосов
/ 19 июля 2011

Вы пробовали [self reloadData]?Учитывая, что вы хотите обновить UITableView FirstViewController.

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