Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
225
Crash in Sample projects for Calender
posted

Hi,

Steps to reproduce crash on calendar view.

- Change appointment duration as more than one day (for e.g in appts.csv file, last column change it to 3000)

- Run app & then click on date in month view for that multiple appointment , app is crashing.

 Please find below partial crash log,

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 96 beyond bounds [0 .. 95]'

*** First throw call stack:

(

0   CoreFoundation                      0x0332e5e4 __exceptionPreprocess + 180

1   libobjc.A.dylib                     0x02c258b6 objc_exception_throw + 44

2   CoreFoundation                      0x032cf556 -[__NSArrayM objectAtIndex:] + 246

3   CoreFoundation                      0x033ad608 -[NSArray objectAtIndexedSubscript:] + 40

4   SamplesBrowser                      0x001f02ae -[DayViewArea updateLayout] + 1149

5   SamplesBrowser                      0x001f205e -[DayViewArea setDay:withAppointments:force:] + 288

6   SamplesBrowser                      0x001f5535 -[MultiDayViewArea render:] + 1120

7   SamplesBrowser                      0x001f4116 -[MultiDayViewArea request:appointmentsProvided:] + 722

8   SamplesBrowser                      0x002060a5 -[IGCalendarAppointmentRequest provideAppointments:] + 102

9   SamplesBrowser                      0x0011d35a __92-[igCalendarAppointmentDatasourceProtocolAsync calendarView:asyncAppointmentRequest:ofType:]_block_invoke_2 + 122

10  Foundation                          0x02467b85 -[NSBlockOperation main] + 88

11  Foundation                          0x024c0a69 -[__NSOperationInternal _start:] + 671




Parents
  • 40030
    Offline posted

    Hi, 

    I couldn't reproduce the error, although i think it was a problem originally in the SamplesBrowser. Basically we weren't building the dates properly. Below you can find the latest version of the method we're using to load the CSV:

    -(void)loadAppts

    {

        

        [[[NSOperationQueue alloc]init] addOperation:[NSBlockOperation blockOperationWithBlock:^(void)

                                                      {

                                                          

                                                          NSString* filepath = [[NSBundle mainBundle] pathForResource:@"appts" ofType:@"csv"];

                                                          

                                                          NSError *err;

                                                          NSString *dataRaw = [NSString stringWithContentsOfFile:filepath encoding:NSASCIIStringEncoding error:&err];

                                                          

                                                          NSArray *linesArray = [dataRaw componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@",\r"]];

                                                          NSMutableArray* appts = [[NSMutableArray alloc]init];

                                                          

                                                          for(int i = 0; i < linesArray.count; i+=4)

                                                          {

                                                              NSMutableDictionary* appt = [[NSMutableDictionary alloc]init];

                                                              

                                                              appt[@"location"] = linesArray[i + 1];

                                                              appt[@"title"] = linesArray[i + 2];

                                                              

                                                              NSString* dateString = linesArray[i];

                                                              

                                                              float duration = ((NSString*)linesArray[i + 3]).floatValue;

                                                              

                                                              NSDateFormatter *df = [[NSDateFormatter alloc] init];

                                                              [df setDateFormat:@"MM.dd.yy HH:mm"];

                                                              NSDate* date;

                                                              [df getObjectValue:&date forString:dateString range:nil error:nil];

                                                              

                                                              NSDateComponents* comps = [[NSDateComponents alloc]init];

                                                              comps.minute = duration;

                                                              

                                                              NSCalendar* cal = [NSCalendar currentCalendar];

                                                              NSDate* endDate = [cal dateByAddingComponents:comps toDate:date options:0];

                                                              

                                                              appt[@"start"] = date;

                                                              appt[@"end"]= endDate;

                                                              

                                                              [appts addObject:appt];

                                                          }

                                                          

                                                          [[NSOperationQueue mainQueue] addOperation: [NSBlockOperation blockOperationWithBlock:^(void)

                                                                                                       {

                                                                                                           _appts = [NSArray arrayWithArray:appts];

                                                                                                       }]];

                                                      }]];

       }

    -SteveZ

Reply Children