私のアプリはタブバーアプリです。最初のタブには、いくつかのデータを含むテーブルビューがあります。ユーザーが行に触れると、いくつかの情報が表示され、その情報を「お気に入り」に保存できます。2番目のタブには、最初のタブでユーザーが「お気に入り」として保存したデータを含む別のテーブルビューがあります。
だから...ユーザーがいくつかのデータをお気に入りとして保存すると、これは私のコードです:
-(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];
}
わかりました、うまくいきます!どうしたの?私の2番目のタブでは、「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」は機能しません!
例: データが保存されていない場合、ユーザーが 2 番目のタブを開くと、empty_data_view が表示されます。次に、最初のタブに移動し、いくつかのデータを保存します。その後、2 番目のタブに戻ると、empty_data_view はなくなりますが ([my_array count] が 1 未満ではないため)、tableview は空です! データーがない!アプリを閉じて (マルチタスキング バーからでも) 再度開いても問題ありません。すべて正常に動作します。データが表示されます(さらにデータを保存すると、テーブルビューは毎回データを正しくリロードします)。
なぜなのかご存知ですか?
編集:解決しました!私はviewdidLoadで(2番目のテーブルビューで)他の配列をロードしていました...今、viewWillAppearですべての配列をロードして動作します!