我有一个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...
}
答案 0 :(得分:3)
我最近遇到过类似的问题,我的误解是只要应用程序打开就会调用viewWillAppear
/ viewDidAppear
(并显示相应的视图控制器)。实际上并非如此!
如何执行此操作是为NSNotification
添加观察者,如下所示:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateData) name:UIApplicationDidBecomeActiveNotification object:nil];
iOS会在您的应用启动时发送系统NSNotification
。通知的名称保存在常量UIApplicationDidBecomeActiveNotification
中。您可以添加保存数据(或该任何其他类)的UITableViewController
作为该通知的观察者,并在收到通知时执行更新。