从一个选项卡保存数据,在另一个选项卡中重新加载数据

时间:2011-03-17 16:56:30

标签: iphone tableview tabbar reloaddata

我的应用是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中的所有数组并且它可以工作!

1 个答案:

答案 0 :(得分:0)

我的逻辑无法解决任何问题。但是,为什么不以不同的方式尝试它。可以使用[UIApplication sharedApplication]来访问项目应用程序委托.delgate将值设置为那里的数组,然后从第二个选项卡访问它。因为您将从两个选项卡访问相同的对象,所以在加载时不会有任何问题。