#iphone #tableview #tabbar #reloaddata
#iPhone #просмотр таблицы #панель вкладок #повторная загрузка данных
Вопрос:
Мое приложение — это приложение с панелью вкладок. На первой вкладке есть 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];
}
Хорошо, это работает!
В чем проблема?
Что на моей второй вкладке я хочу показывать tableview, только если есть данные в «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];
}
}
Хорошо, в чем проблема?
Этот «повторная загрузка данных» не работает!
Например: данные не сохранены, пользователь открывает вторую вкладку и видит empty_data_view. Затем он переходит на первую вкладку и сохраняет некоторые данные. Затем, если он вернется на вторую вкладку, empty_data_view исчезнет (потому что [my_array count] не равен < 1), но tableview будет пустым! Данных нет! Если я закрою приложение (даже из панели многозадачности) и снова открою, все в порядке, все работает отлично! Я вижу свои данные (и если я сохраняю больше данных, tableview корректно перезагружает данные каждый раз).
Вы знаете почему?
РЕДАКТИРОВАТЬ: РЕШЕНО! я загружал другие массивы (во втором tableview) в viewDidLoad … теперь я загружаю все массивы в viewWillAppear, и это работает!
Комментарии:
1. Я думаю, вы пропустили добавление UITableView в view, где у вас есть инструкция типа [self.view addSubview:MY_TABLE_VIEW];
2. нет, мой tableview подключен к IB, все в порядке! Но на самом деле я вижу свой tableview, когда сохраняю некоторые данные, но вижу его пустым (пока не закрою и снова не открою приложение)
Ответ №1:
Я не могу найти никаких проблем в вашей логике. Но почему бы вам не попробовать это другим способом. Доступ к делегату приложения Projects можно получить с помощью [UIApplication sharedApplication].delgate устанавливает значения в массив там и получает к нему доступ оттуда со второй вкладки. поскольку вы будете обращаться к одному и тому же объекту с двух вкладок, проблем с загрузкой не возникнет.