0

私のアプリはタブバーアプリです。最初のタブには、いくつかのデータを含むテーブルビューがあります。ユーザーが行に触れると、いくつかの情報が表示され、その情報を「お気に入り」に保存できます。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ですべての配列をロードして動作します!

4

1 に答える 1

0

あなたのロジックに問題は見つかりません。しかし、別の方法で試してみませんか。Projects アプリケーション デリゲートには、 [UIApplication sharedApplication].delgate set Values を使用してアクセスでき、2 番目のタブからそこからアクセスできます。2 つのタブから同じオブジェクトにアクセスするため、読み込みに問題はありません。

于 2011-03-17T17:52:29.467 に答える