diff -r bab4a078263f -r 4e2813713358 cocoaTouch/SingleTeamViewController.m --- a/cocoaTouch/SingleTeamViewController.m Tue Apr 06 21:00:55 2010 +0000 +++ b/cocoaTouch/SingleTeamViewController.m Tue Apr 06 21:54:46 2010 +0000 @@ -10,7 +10,7 @@ #import "HogHatViewController.h" @implementation SingleTeamViewController -@synthesize hogsList, hatList, secondaryItems, teamName; +@synthesize teamDictionary, hatArray, secondaryItems; #pragma mark - @@ -33,28 +33,30 @@ NSLocalizedString(@"Level",@""),nil]; self.secondaryItems = array; [array release]; -} - - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; // load data about the team and extract info NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/Teams/%@.plist",[paths objectAtIndex:0],self.teamName]; - NSDictionary *teamDict = [[NSDictionary alloc] initWithContentsOfFile:teamFile]; + NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/Teams/%@.plist",[paths objectAtIndex:0],self.title]; + NSMutableDictionary *teamDict = [[NSMutableDictionary alloc] initWithContentsOfFile:teamFile]; [teamFile release]; - - // grab the hog list - self.hogsList = [teamDict objectForKey:@"hedgehogs"]; + self.teamDictionary = teamDict; + [teamDict release]; + + // listen if any childController modifies the plist and write it if needed + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setWriteNeeded) name:@"setWriteNeedTeams" object:nil]; + isWriteNeeded = NO; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + // grab the name of the team - self.teamName = [teamDict objectForKey:@"teamname"]; - self.title = self.teamName; - [teamDict release]; + self.title = [self.teamDictionary objectForKey:@"teamname"]; // load the images of the hat for aach hog - NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:[self.hogsList count]]; - for (NSDictionary *hog in self.hogsList) { + NSArray *hogArray = [self.teamDictionary objectForKey:@"hedgehogs"]; + NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:[hogArray count]]; + for (NSDictionary *hog in hogArray) { NSString *hatFile = [[NSString alloc] initWithFormat:@"%@/Data/Graphics/Hats/%@.png",[[NSBundle mainBundle] resourcePath],[hog objectForKey:@"hat"]]; UIImage *image = [[UIImage alloc] initWithContentsOfFile: hatFile]; @@ -67,8 +69,10 @@ CGImageRelease(cgImgage); [hatSprite release]; } - self.hatList = array; + self.hatArray = array; [array release]; + + [self.tableView reloadData]; } /* @@ -76,11 +80,25 @@ [super viewDidAppear:animated]; } */ -/* -- (void)viewWillDisappear:(BOOL)animated { + +-(void) setWriteNeeded { + isWriteNeeded = YES; +} + +// write to disk the team dictionary +-(void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; + + if (isWriteNeeded) { + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/Teams/%@.plist",[paths objectAtIndex:0],self.title]; + [self.teamDictionary writeToFile: teamFile atomically:YES]; + [teamFile release]; + + isWriteNeeded = NO; + } } -*/ + /* - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; @@ -124,19 +142,22 @@ cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } - + NSArray *hogArray; NSInteger row = [indexPath row]; switch ([indexPath section]) { case 0: - cell.textLabel.text = teamName; + cell.textLabel.text = self.title; + cell.imageView.image = nil; break; case 1: - cell.textLabel.text = [[self.hogsList objectAtIndex:row] objectForKey:@"hogname"]; + hogArray = [self.teamDictionary objectForKey:@"hedgehogs"]; + cell.textLabel.text = [[hogArray objectAtIndex:row] objectForKey:@"hogname"]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - cell.imageView.image = [self.hatList objectAtIndex:row]; + cell.imageView.image = [self.hatArray objectAtIndex:row]; break; case 2: cell.textLabel.text = [self.secondaryItems objectAtIndex:row]; + cell.imageView.image = nil; break; default: break; @@ -188,15 +209,16 @@ #pragma mark - #pragma mark Table view delegate - -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (1 == [indexPath section]) { if (nil == hogChildController) { hogChildController = [[HogHatViewController alloc] initWithStyle:UITableViewStyleGrouped]; } - - hogChildController.hog = [hogsList objectAtIndex:[indexPath row]]; - //NSLog(@"%@",hogChildController.hog); + + // cache the dictionary file of the team, so that other controllers can modify it + hogChildController.teamDictionary = self.teamDictionary; + hogChildController.selectedHog = [indexPath row]; + [self.navigationController pushViewController:hogChildController animated:YES]; } } @@ -204,7 +226,6 @@ #pragma mark - #pragma mark Memory management - -(void) didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; @@ -212,16 +233,17 @@ } -(void) viewDidUnload { - self.hogsList = nil; + self.hatArray = nil; self.secondaryItems = nil; - self.teamName = nil; + self.teamDictionary = nil; + [super viewDidUnload]; } -(void) dealloc { [secondaryItems release]; - [hogsList release]; - [teamName release]; + [hatArray release]; + [teamDictionary release]; [super dealloc]; }