我的应用是tabBar应用。在第一个选项卡中有一个包含一些数据的tableview;如果用户触摸一行,他会看到一些信息,并且他可以将该信息保存为“最喜欢的”。 在第二个选项卡中有另一个tableview,数据在第一个选项卡中保存为“收藏夹”。
所以...当用户保存为喜欢的一些数据时,这是我的代码:
-(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”中有数据时显示tableview:如果没有,我想显示一个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]不是&lt; 1),但tableview为空!没有数据! 如果我关闭应用程序(即使从多任务栏)并重新打开,它没关系,一切正常!我看到了我的数据(如果我保存更多数据,则tableview每次都正确地重新加载数据。)
你知道为什么吗?
编辑:解决了! 我正在viewdidLoad中加载其他数组(在第二个tableview中)...现在我加载viewWillAppear中的所有数组并且它可以工作!答案 0 :(得分:0)
我的逻辑无法解决任何问题。但是,为什么不以不同的方式尝试它。可以使用[UIApplication sharedApplication]来访问项目应用程序委托.delgate将值设置为那里的数组,然后从第二个选项卡访问它。因为您将从两个选项卡访问相同的对象,所以在加载时不会有任何问题。