0

我正在创建一个应用程序,该应用程序应列出单击按钮时的日期和时间,并将列表放入 UITableView 中。我的想法是每次用户点击按钮时获取日期和时间戳,然后将其保存在单击按钮时的每次时间和日期的字典对象数组中。我还将有另一个按钮,它只是加载一个模式视图,显示所述 UITableView 和按钮点击历史列表。

我能够部分地做到这一点,因为我的表填充了数组中的字典条目数。问题是,它总是以所有条目的相同时间和日期结束。

这是最初带有一个条目的表格的屏幕截图。 在此处输入图像描述

当我多次点击按钮时会发生这种情况。它显示所有行的更新时间。 在此处输入图像描述

如何在表格中显示历史记录并防止其被更新?我只是使用 NSUserDefaults 来保存数据。

这是我的 Button Clicked 方法中的一些代码:

- (IBAction)btnClicked:(id)sender
{
    NSLog(@"Button pressed");

    // 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:@"TimeStamp"];
    [defaults setObject:date            forKey:@"Date"];
    [defaults synchronize];

    NSString *time = [defaults objectForKey:@"TimeStamp"];
    NSString *dateToday = [defaults objectForKey:@"Date"];

    tableVC.tableDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:time, @"Time", dateToday, @"Date", nil];

    [tableVC.tableArray addObject:tableVC.tableDict];
    [tableVC.table reloadData];
}

这是我的 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];
}

这是我的表格方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [tableArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomCell *customCell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
    if (customCell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" 
                                                     owner:self 
                                                   options:nil];
        for (id oneObject in nib) if ([oneObject isKindOfClass:[CustomCell class]])
            customCell = (CustomCell *)oneObject;
    }

    customCell.dateLbl.text = [tableDict objectForKey:@"Date"];
    customCell.timeLbl.text = [tableDict objectForKey:@"Time"];

    return customCell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 74;
}
4

1 回答 1

0

好的,我想我发现了您的问题,您正在访问每个表格行的相同日期。

customCell.dateLbl.text = [tableDict objectForKey:@"Date"];
customCell.timeLbl.text = [tableDict objectForKey:@"Time"];

是不正确的

NSDictionarry *dict = [tableArray objectAtIndex:[indexPath row]];
customCell.dateLbl.text = [dict objectForKey:@"Date"];
customCell.timeLbl.text = [dict objectForKey:@"Time"];

现在应该很好地循环并打印所有日期。

您所拥有的代码的问题是,对于 tableview 中的每一行,都会调用 index path 方法的行,即它就像一个循环,因此您自己分配每个单元格属性,希望这是有道理的。

于 2012-06-25T04:35:39.093 回答