viewDidAppearの処理がされない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
TEAS TEA

viewDidAppearの処理がされない

#1

投稿記事 by TEAS TEA » 10年前

タブバーのアプリを作っております。
タブ1でUserDefaultsに追加された内容をタブ2で表示するといったことをしております。

下記の様に書いてテーブルを更新しているのですがセルの内容が更新されません。
再起動すると内容は更新されます。
原因がおわかりになる方はおりませんでしょうか。

コード:

- (void)viewDidAppear:(BOOL)animated {
	[self.tableView reloadData];
	[super viewDidAppear:animated];
}

めるぽん

Re: viewDidAppearの処理がされない

#2

投稿記事 by めるぽん » 10年前

viewDidAppear は画面が切り替わったからといって必ず呼ばれるわけではないです。
http://stack3.net/blogdev/p/299
あたりが詳しく書かれてて分かりやすいですね。

TEAS TEA

Re: viewDidAppearの処理がされない

#3

投稿記事 by TEAS TEA » 10年前

回答が遅くなってしまい申し訳ありませんでした。
参考になるURLをありがとうございます。
なぜ更新されないかが何となくわかりました。
ただ頂いたURLとは状況が少し違うので自分なりに修正して実装することは出来ませんでした。

頂いたURLでは階層が下に入ってるからのような気がするのですが
タブだと同じレベルでの階層の気がします。

A
├B
└C

AーB
  └C

現在のソースでは下記の様になっておりFavorite~.mにてデータの更新を行いたいです。

コード:

/////AppDelegate~.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    
	// タブバー
	viewControllers = [[NSMutableArray alloc] initWithCapacity:0];
	
	NSArray *tabBarTitleArray = [NSArray arrayWithObjects:								 
								 @"ホーム",
								 @"お気に入り",
								 @"更新情報",
								 nil];
	
	NSArray *imageArray = [NSArray arrayWithObjects:	
						   @"Home.png",	
						   @"Favorite.png",	
						   @"Others.png",
						   nil];

	TopMenuController *tableViewController;
	
	for(int i = 0; i <[tabBarTitleArray count]; i++){
		if( i == 0 ) tableViewController = [[TopMenuController alloc] init];
		if( i == 1 ) tableViewController = [[FavoriteMenuController alloc] init];
		if( i == 2 ) tableViewController = [[UpdataMenuController alloc] init];
		tableViewController.title = [tabBarTitleArray objectAtIndex:i];
		navigationController = [[UINavigationController alloc] initWithRootViewController:tableViewController];
		navigationController.tabBarItem.title = [tabBarTitleArray objectAtIndex:i];
		navigationController.tabBarItem.image = [UIImage imageNamed:[imageArray objectAtIndex:i]];
		[viewControllers addObject:navigationController];
	}
	
	tabBarController = [[UITabBarController alloc] init];
	tabBarController.moreNavigationController.navigationBar.barStyle = UIBarStyleBlack;
	tabBarController.customizableViewControllers = NO;
	[tabBarController setViewControllers:viewControllers];
//	tabBarController.view.frame = CGRectMake( 0, 20, 320, 480-20-48 );
	
	[window addSubview:tabBarController.view];
	[window makeKeyAndVisible];
	
    return YES;
}

/////FavoriteMenu~.m
- (void)viewDidAppear:(BOOL)animated {
	[self.tableView reloadData];
	[super viewDidAppear:animated];
}

TEAS TEA

Re: viewDidAppearの処理がされない

#4

投稿記事 by TEAS TEA » 10年前

すみません…色々試してはみたのですがやはり上手くいきません。
プロジェクトを添付したほうが宜しいでしょうか。

アバター
Justy
副管理人
記事: 122
登録日時: 10年前
住所: 神奈川県

Re: viewDidAppearの処理がされない

#5

投稿記事 by Justy » 10年前

 viewDidAppearは呼ばれているのですか? 呼ばれていないのですか?

 呼ばれていないのであれば、UITabBarDelegate の didSelectItemにその処理を移してみて
その結果を教えて下さい。
 呼ばれていて reloadDataも実行されているのにも関わらず更新されないのであれば、
断片コードではどうにもならないのでプロジェクトをアップロードして下さい。

TEAS TEA

Re: viewDidAppearの処理がされない

#6

投稿記事 by TEAS TEA » 10年前

Justy様

申し訳ございません。事故解決できました。
頂いたアドバイスを基に呼ばれているか調べてみました。
viewDidAppearを調べてみたら呼ばれてみたのですが表示する用のデータが更新されておりませんでした。
こちらを更新するように修正した所、問題なく表示できました。

閉鎖

“C言語何でも質問掲示板” へ戻る