メインビューコントローラーは、タップすると詳細ビューコントローラーを押す1つのボタンと、テーブルを持つモーダルビューコントローラーを起動するだけの別のボタンで構成されています。この詳細ビューコントローラには、タップすると、モーダルビューコントローラのテーブルによってロードされた配列に新しいオブジェクトを追加するボタンがあります。
問題は、新しいオブジェクトボタンを追加してもNSMutableArrayに追加されないことです。
メインビューにボタンを配置し、オブジェクトをNSMutableArrayに追加するのと同じメソッドを割り当てると、機能します。ボタンがナビゲーションコントローラーとモーダルビューのいずれかを介して表示される別のビューコントローラーに配置されている場合は、機能しません。
詳細ビューコントローラでボタンが押されたときのコードは次のとおりです。
- (IBAction)confirmBtnPressed
{
// Gets the current time and formats it
NSDate *timeNow = [NSDate date];
NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
[timeFormatter setDateFormat:@"hh:mm a"];
// Gets the current date and formats it
NSDate *dateNow = [[NSDate alloc] init];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd, yyyy"];
NSString *currentTime = [timeFormatter stringFromDate:timeNow];
NSString *currentDate = [dateFormatter stringFromDate:dateNow];
NSString *timestamp = currentTime;
NSString *date = currentDate;
// This is where values gets saved
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:timestamp forKey:kTimeStampText];
[defaults setObject:date forKey:kDateText];
[defaults synchronize];
NSString *timeToday = [defaults objectForKey:kTimeStampText];
NSString *dateToday = [defaults objectForKey:kDateText];
tableVC.tableDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:timeToday, @"Time", dateToday, @"Date", nil];
[tableVC.tableArray addObject:tableVC.tableDict];
[tableVC.table reloadData];
}
テーブルをモーダルにロードするボタンが押されたときのメインビューコントローラーのコードは次のとおりです。
// Table loaded
- (IBAction)viewHistoryPressed:(id)sender
{
if (!self.historyViewController)
{
self.historyViewController = [[HistoryViewController alloc] initWithNibName:@"HistoryViewController" bundle:nil];
}
[self presentModalViewController:historyViewController animated:YES];
}
テーブルビューコントローラのviewDidLoadは次のとおりです。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *time = [defaults objectForKey:kTimeStampText];
NSString *date = [defaults objectForKey:kDateText];
tableDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:time, @"Time", date, @"Date", nil];
tableArray = [[NSMutableArray alloc] initWithObjects:tableDict, nil];
}
メインビューのスクリーンショット:
詳細ビュー:
テーブルビュー: