两个nsmutablearray值正在与ios中的另一个进行交换

时间:2013-06-20 06:44:48

标签: ios objective-c uitableview nsmutablearray

我在NSMutableArray(self.tablePdfListArray)中插入tableview textlabel,在同一索引中插入NSMutableArray(self.dateListArray)中的detailtextlabel。它在第一时间正确添加,但当我再次打开TableView时,detailTextlabel成为textlabeltextlabel正在变为detailTextlabel

NSLog NSMutabelArray并且知道两个数组值都在交换。如何保留其原始价值?提前感谢任何建议。 使用tableView代码编辑

 - (void)viewDidLoad
 {
 if([[NSUserDefaults standardUserDefaults] objectForKey:@"children"] != nil )
{
    self.tablePdfListArray = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"children"]];

}
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"dates"] != nil)
{
    self.dateListArray = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"dates"]];

}
}
  -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0)
{
  self.myPDFName = [NSString stringWithFormat:@"%@", [alertView textFieldAtIndex:0].text];

    firstDayInYear = [NSDate date];
    dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
    NSString *currentTime = [dateFormatter stringFromDate:firstDayInYear];
    NSLog(@"User's current time in their preference format:%@",currentTime);

    if(!self. tablePdfListArray)
    {

        self.tablePdfListArray = [[NSMutableArray alloc]init];
    }
    if(!self.dateListArray)
    {
        self.dateListArray = [[NSMutableArray alloc]init];
    }
    [self.dateListArray insertObject:currentTime atIndex:0];

    NSLog(@"mhy date dateListArray %@",dateListArray);

     //the below if condition will not allow repeatative string array in tableList and textfield lenth.
           if ([[alertView textFieldAtIndex:0].text length] != 0 && ![self.tablePdfListArray containsObject:self.myPDFName])
    {

        [self.tablePdfListArray insertObject:[NSString stringWithFormat:@"%@", [alertView textFieldAtIndex:0].text] atIndex:0];

                   NSLog(@"mhy date tablePdfListArray %@",tablePdfListArray);
        NSIndexPath * indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

        [self.pdfListnameTable insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationAutomatic];

        NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
        [defaults setObject:self.dateListArray forKey:[NSString stringWithFormat:@"children"]];
        [defaults setObject:self.tablePdfListArray forKey:[NSString stringWithFormat:@"dates"]];
        [defaults synchronize];

    }
  }}

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

if( tableView == pdfListnameTable)
{

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

        cell.selectionStyle = UITableViewCellSelectionStyleNone;           //cell bg
        //self.myChklist.backgroundColor = [UIColor clearColor];

    }

    NSString *tablePdfname = [self.tablePdfListArray objectAtIndex:indexPath.row];
    cell.textLabel.text = tablePdfname;

    NSString *tablePdfdate = [self.dateListArray objectAtIndex:indexPath.row];
            //[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];



       cell.detailTextLabel.text = tablePdfdate;

    return cell;

 }
 }

2 个答案:

答案 0 :(得分:1)

为什么要查看tableView == pdfListnameTable

那应该是tableView isEqual:self. pdfListnameTable。不确定这是否相关,但如果你有多个tableView - 我猜你没有切换到它,因为似乎缺少一个else语句。

答案 1 :(得分:0)

好吧,我不确定,但我对你的代码进行了一些重构。你有一些地方看起来你正在尝试访问一个属性,但是你也试图将它作为一个实例值来访问它。

所以,这就是我所做的。这可能不正确。但它应该接近(或至少会帮助你解决这个问题)

@interface someTableViewController()
@property(nonatomic, strong) NSMutableArray *tablePdfListArray;
@property(nonatomic, strong) NSMutableArray *dateListArray;
@property(nonatomic, copy) NSString *myPDFName;
@property(nonatomic, strong) NSDate *firstDayInYear;
@property(nonatomic, strong) NSDateFormatter *dateFormatter;
@property(nonatomic, weak) IBOutlet UITableView *pdfListnameTable;

@end


@implementation someTableViewController

-(void)viewDidLoad {

    self.tablePdfListArray = [NSMutableArray new];
    self.dateListArray = [NSMutableArray new];

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    if([userDefaults objectForKey:@"children"] != nil ) {
        self.tablePdfListArray = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"children"]];
    }

    if([userDefaults objectForKey:@"dates"] != nil) {
        self.dateListArray = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"dates"]];
    }
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.selectionStyle = UITableViewCellSelectionStyleNone; //cell bg

    NSInteger currentRow = indexPath.row;

    NSString *tablePdfname = [self.tablePdfListArray objectAtIndex:currentRow];
    cell.textLabel.text = tablePdfname;

    NSString *tablePdfdate = [self.dateListArray objectAtIndex:currentRow];
    cell.detailTextLabel.text = tablePdfdate;

    UIButton *someButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
    [someButton setTitle:@"CLICK" forState:UIControlStateNormal];
    [someButton addTarget:self action:@selector(testButtonClickIndexPath:) forControlEvents:UIControlEventTouchUpInside];

    [cell.contentView addSubview:someButton];

    return cell;
}
-(void)testButtonClickIndexPath:(id)sender {

    CGPoint touchPoint = [sender convertPoint:CGPointZero toView:self.pdfListnameTable];
    NSIndexPath *indexPath = [self.pdfListnameTable indexPathForRowAtPoint:touchPoint];

    if(indexPath != nil) {
        // show alert message, call it, or whatever.  just using a silly one for now..
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"RAR"
                            message:@"Mamma Say..my..my mamma say"
                                                  delegate:self
                                         cancelButtonTitle:@"Medulla Oblongata"
                                         otherButtonTitles:@[ @"h2o", @"Gatorade"]];
        [alert show];
    }
}

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

    if(buttonIndex == 0) {

        self.myPDFName = [NSString stringWithFormat:@"%@", [alertView textFieldAtIndex:0].text];
        self.firstDayInYear = [NSDate date];

        self.dateFormatter = [[NSDateFormatter alloc] init];
        [self.dateFormatter setTimeStyle:NSDateFormatterShortStyle];
        [self.dateFormatter setDateStyle:NSDateFormatterMediumStyle];

        NSString *currentTime = [self.dateFormatter stringFromDate:self.firstDayInYear];

        NSLog(@"User's current time in their preference format:%@",currentTime);


        [self.dateListArray insertObject:currentTime atIndex:0];

        NSLog(@"mhy date dateListArray %@",self.dateListArray);

        //the below if condition will not allow repeatative string array in tableList and textfield lenth.
        if([[alertView textFieldAtIndex:0].text length] != 0 && ![self.tablePdfListArray containsObject:self.myPDFName]) {
            [self.tablePdfListArray insertObject:[NSString stringWithFormat:@"%@", [alertView textFieldAtIndex:0].text] atIndex:0];

            NSLog(@"mhy date tablePdfListArray %@",self.tablePdfListArray);
            NSIndexPath * indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

            [self.pdfListnameTable insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationAutomatic];

            NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
            [defaults setObject:self.dateListArray forKey:[NSString stringWithFormat:@"dates"]];
            [defaults setObject:self.tablePdfListArray forKey:[NSString stringWithFormat:@"children"]];
            [defaults synchronize];
        }
    }
}

@end