每次应用打开时刷新视图和数据

时间:2015-05-27 15:22:56

标签: ios objective-c uitableview

我有一个TableView,每次应用打开时都需要刷新,但我无法做到这一点。

原因是,JSON文件中存储了每天的新数据,因此应用需要刷新以确定它是否是新的一天所以它可以加载新数据。

我尝试将我的代码从viewDidLoad移动到viewWillAppear,认为可以解决这个问题,但事实并非如此。

有什么想法吗?

ViewController.m

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

    // Get current date, remove year from current date
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateStyle:NSDateFormatterMediumStyle];
    NSString *dateToday = [formatter stringFromDate:[NSDate date]];
    NSString *dateTodayShort = [dateToday substringToIndex:[dateToday length] -6];

    // Get JSON file path
    NSString *JSONFilePath = [[NSBundle mainBundle] pathForResource:@"Days" ofType:@"json"];
    NSData *JSONData = [NSData dataWithContentsOfFile:JSONFilePath];
    NSDictionary *JSONDictionary = [NSJSONSerialization JSONObjectWithData:JSONData options:kNilOptions error:nil];
    days = JSONDictionary[@"days"];

    // Iterate thru JSON to find Data for Today
    NSObject *todayJson;
    for (NSObject *object in days) {
        NSString *dateObject = [object valueForKey:@"day"];
        if ([dateObject isEqualToString:dateTodayShort]) {
            todayJson = object;
            NSString *textToday = [todayJson valueForKey:@"text"];
            NSString *backgroundImageToday = [todayJson valueForKey:@"backgroundImage"];
            textGlobal = textToday;
            backgroundImageGlobal = backgroundImageToday;
        }
    }
    // Other set up code...
}

1 个答案:

答案 0 :(得分:3)

我最近遇到过类似的问题,我的误解是只要应用程序打开就会调用viewWillAppear / viewDidAppear(并显示相应的视图控制器)。实际上并非如此!

如何执行此操作是为NSNotification添加观察者,如下所示:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateData) name:UIApplicationDidBecomeActiveNotification object:nil];

iOS会在您的应用启动时发送系统NSNotification。通知的名称保存在常量UIApplicationDidBecomeActiveNotification中。您可以添加保存数据(或该任何其他类)的UITableViewController作为该通知的观察者,并在收到通知时执行更新。