我的应用程序是一个 tabBar 应用程序。在第一个选项卡中有一个包含一些数据的表格视图;如果用户触摸一行,他会看到一些信息,他可以将这些信息保存为“收藏”。在第二个选项卡中有另一个表格视图,其中数据由第一个选项卡中的用户保存为“收藏夹”。
所以...当用户将某些数据另存为收藏时,这是我的代码:
-(IBAction)save{
NSString *saved = [NSString stringWithFormat:@"hello %@", my_variable]; //this is just an example :D
[my_array addObject:saved];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[[NSUserDefaults standarddefaults] setObject:my_array forKey:@"my_array"];
[defaults synchronize];
}
好的,它有效!有什么问题?在我的第二个选项卡中,我只想在“my_array”中有数据时显示表格视图:如果没有,我想显示一个 UIView。
所以,在“myviewController_secondTab.m”我有这个:
-(void)viewWillAppear:(BOOL)animated {
my_array = [[NSUserDefaults standardUserDefaults] objectForKey:@"my_array"];
[self.view addSubview:empty_data_view]; //this is the view when myarray is empty
if ([my_array count] <1){
CGRect viewFrame = CGRectMake(0.0f, 0.0f, 320.0f, 367.0f);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.0];
[empty_data_view setFrame:viewFrame];
[UIView commitAnimations];
} else {
CGRect viewFrame = CGRectMake(0.0f, 361.0f, 320.0f, 367.0f);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.0];
[empty_data_view setFrame:viewFrame];
[UIView commitAnimations];
[MY_TABLE_VIEW reloadData];
}
}
好的,有什么问题?那个“reloadData”不起作用!
例如:没有保存数据,用户打开第二个选项卡,他看到了 empty_data_view。然后他进入第一个选项卡并保存了一些数据。然后,如果他返回到第二个选项卡,则 empty_data_view 消失了(因为 [my_array count] 不 < 1),但 tableview 是空的!没有数据!如果我关闭应用程序(甚至从多任务栏)并重新打开,没关系,一切正常!我看到了我的数据(如果我保存更多数据,tableview 每次都会正确重新加载数据)。
你知道为什么吗?
编辑:解决了!我正在 viewdidLoad 中加载其他数组(在第二个 tableview 中)......现在我在 viewWillAppear 中加载了所有数组,它可以工作了!