内联日期选择器在第二次尝试时崩溃

Posted

技术标签:

【中文标题】内联日期选择器在第二次尝试时崩溃【英文标题】:Inline date picker crashed on second attempt 【发布时间】:2014-04-08 11:36:59 【问题描述】:

我已经为这个问题苦苦挣扎了两个星期。但在 *** 人员的帮助下,我已经成功实现了 95%。

Here is my problem.. 现在我可以在选择日期时使用选择器单元格 [First most cell] 加载我的结果。

现在我有另一个问题...当我第一次运行我的应用程序时,它按我的预期工作..但是当我点击第一个单元格以选择不同的日期时,应用程序崩溃了..

Here是日志输出...

下面是我的实现代码

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section             

 NSDictionary* reqFdate= [ScheduleView getRequestForDate];

if (reqFdate.count == 0) 
    NSInteger numberOfRows = [self.persons count];

    if ([self datePickerIsShown])

        numberOfRows++;

    

    return numberOfRows;

else

    return reqFdate.count + 1;







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


    UITableViewCell *cell;

    NSDate *today = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    // display in 12HR/24HR (i.e. 11:25PM or 23:25) format according to User Settings
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    NSString *currentTime = [dateFormatter stringFromDate:today];
    NSDate *date=[dateFormatter dateFromString:currentTime];



    if(indexPath.row==0)
        VCPerson *person = self.persons[0];

        cell = [self createPersonCell:person];

    



    else if ([self datePickerIsShown] && (self.datePickerIndexPath.row == 1))

        // VCPerson *person = self.persons[indexPath.row -1];



        cell = [self createPickerCell:date];

    

    else

        cellForDatePickCell *cell = (cellForDatePickCell*)[self.tableView dequeueReusableCellWithIdentifier:kOtherCellIdentifier];
        cell.delegate_Dtepick = self;

        return cell;

    


    if(indexPath.section!=0 && tapfirstCell) 

        UITableViewCell *cell = (UITableViewCell*)[self.tableView dequeueReusableCellWithIdentifier:kOtherCellIdentifier forIndexPath:indexPath];
        //cell.delegate_Dtepick = self;
        NSDictionary *dictionary = [_dataArray objectAtIndex:indexPath.section];
        NSArray *array = [dictionary objectForKey:@"data"];
        NSString *cellValue = [array objectAtIndex:indexPath.row];
        cell.textLabel.text =cellValue;

    

    return cell;






-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 




[self.tableView beginUpdates];

if ([self datePickerIsShown] && (self.datePickerIndexPath.row - 1 == indexPath.row))

    [self hideExistingPicker];
   // [self.tableView reloadData];
    //[self viewDidLoad];



    //call the service and take the results





    NSString* selecteDate = [ScheduleView getDate];

    NSString* prsonID =[LoginView getPersonID];

    NSDictionary* parms = [NSDictionary dictionaryWithObjectsAndKeys:prsonID,@"caregiverPersonId",selecteDate,@"selectedDate", nil];

    jsonpaser* jp = [[jsonpaser alloc]init];

    [jp getWebServiceResponce:@"http://qa.vardle.com/Mobile/WebServices/AppointmentService.asmx/GetAppointments" :parms success:^(NSDictionary *responseObject)
     



         requestsF_date = responseObject;
         NSLog(@"RESPONSEFORDATE_IN DIDSELECT :%@",requestsF_date);
         NSArray* indexpaths = [self getIndexPaths];
         NSLog(@"indexPATHS %@",indexpaths);
         [self.tableView reloadData];

     ];






    // cellForDatePickCell *cell = (cellForDatePickCell*)[self.tableView dequeueReusableCellWithIdentifier:kOtherCellIdentifier forIndexPath:indexPath];
    // cell.delegate_Dtepick = self;
    //tapfirstCell = true;
   /*
   cellForDatePickCell *cell=(cellForDatePickCell*)[tableView cellForRowAtIndexPath:indexPath];
    if(![cell.textLabel.text isEqualToString:@"5/23/14"])
    
        return; 
    
  */


    if (tapfirstCell==false) 
        tapfirstCell = true;
    
    else
        tapfirstCell = false;
    




else 

    NSIndexPath *newPickerIndexPath = [self calculateIndexPathForNewPicker:indexPath];

    if ([self datePickerIsShown])

        [self hideExistingPicker];



    

    [self showNewPickerAtIndex:newPickerIndexPath];

    self.datePickerIndexPath = [NSIndexPath indexPathForRow:newPickerIndexPath.row + 1 inSection:0];



[self.tableView deselectRowAtIndexPath:indexPath animated:YES];

[self.tableView endUpdates];

请有人告诉我问题出在哪里。为什么当我第二次尝试选择日期时应用程序崩溃了。

请帮忙

【问题讨论】:

崩溃了 bcz 您尝试插入或删除一些实际上不在数组中的索引或您尝试删除的特定位置。使用 NSlog 检查您的数组中有多少价值以及实际存在的索引以及您尝试删除或添加的索引。 【参考方案1】:

我已经解决了我的问题...在我再次开始显示日期选择器之前我没有删除行...

here is the full code

我在这里所做的是:我将 Inline Datepicker 与表格视图一起使用 [日期选择器将通过选择表格视图的第一个单元格来显示]。根据从选择器中选择的日期,我在下方显示我的自定义单元格第一个单元格。[因为第一个单元格总是在那里从日期选择器中选择一个日期]。

如果有人想做和我一样的事情,我认为我的代码会帮助你

谢谢

【讨论】:

以上是关于内联日期选择器在第二次尝试时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

jquery mobile中的日期选择器在第二页中添加时重复

HTML5 日期选择器仅在第二次点击时打开

如果在第二次单击时未选择日期并出现日期验证问题,则日期选择器会从日期选择器文本框中清除所选值

日历验证错误仅在第二次通过 Jquery UI 选择日期后才消失

引导日期时间选择器不更新第二次

Ng2 Bootstrap 的日期选择器在无法读取 getFullYear() 时不断抛出错误