0

我的应用程序是一个 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 中加载了所有数组,它可以工作了!

4

1 回答 1

0

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

于 2011-03-17T17:52:29.467 回答