0

メインビューコントローラーは、タップすると詳細ビューコントローラーを押す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];
}

メインビューのスクリーンショット:

ここに画像の説明を入力してください

詳細ビュー:

ここに画像の説明を入力してください

テーブルビュー:

ここに画像の説明を入力してください

4

2 に答える 2

2

で初期化NSMutableArrayしてみてください:

NSMutableArray *array = [NSMutableArray array]; 

これで、エントリを追加できるようになりました。

これがあなたのために働くかどうか私に知らせてください。

于 2012-06-26T10:25:31.537 に答える
1

viewDidLoadメソッドで...割り当てるときにself.tableDictとself.tableArrayを使用してください。'self'はgetterメソッドとsetterメソッドを呼び出すため、impです。

于 2012-06-26T10:13:08.593 に答える