ページ 11

viewDidAppearの処理がされない

Posted: 2011年2月09日(水) 17:00
by TEAS TEA
タブバーのアプリを作っております。
タブ1でUserDefaultsに追加された内容をタブ2で表示するといったことをしております。

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

コード:

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

Re: viewDidAppearの処理がされない

Posted: 2011年2月09日(水) 21:28
by めるぽん
viewDidAppear は画面が切り替わったからといって必ず呼ばれるわけではないです。
http://stack3.net/blogdev/p/299
あたりが詳しく書かれてて分かりやすいですね。

Re: viewDidAppearの処理がされない

Posted: 2011年2月13日(日) 23:45
by TEAS TEA
回答が遅くなってしまい申し訳ありませんでした。
参考になる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];
}

Re: viewDidAppearの処理がされない

Posted: 2011年2月14日(月) 21:18
by TEAS TEA
すみません…色々試してはみたのですがやはり上手くいきません。
プロジェクトを添付したほうが宜しいでしょうか。

Re: viewDidAppearの処理がされない

Posted: 2011年2月14日(月) 23:04
by Justy
 viewDidAppearは呼ばれているのですか? 呼ばれていないのですか?

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

Re: viewDidAppearの処理がされない

Posted: 2011年2月15日(火) 02:25
by TEAS TEA
Justy様

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