Сохранить данные из одной вкладки и перезагрузить данные в другой вкладке - PullRequest
0 голосов
/ 17 марта 2011

Мое приложение представляет собой приложение 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), но таблица пуста! Нет данных! Если я закрою приложение (даже из панели многозадачности) и снова открою, все в порядке, все работает отлично! Я вижу свои данные (и если я сохраняю больше данных, представление таблицы корректно перезагружает данные каждый раз). </p>

Знаете почему?

РЕДАКТИРОВАТЬ: РЕШЕНО! я загружал другие массивы (во втором табличном представлении) в viewdidLoad ... теперь я загружаю все массивы в viewWillAppear, и это работает!

1 Ответ

0 голосов
/ 17 марта 2011

Я не могу найти никаких проблем в вашей логике. Но почему бы вам не попробовать это по-другому? Получить доступ к делегату приложения Project можно с помощью [UIApplication sharedApplication] .delgate, чтобы установить значения в массив и получить к нему доступ со второй вкладки. поскольку вы будете получать доступ к одному и тому же объекту из двух вкладок, при загрузке проблем не будет.

...