Hello,
I have a 2 tabs application. In the first one, I'm creating objects of the "Sample" and "SampleList" entities. Each sampleList contains an ID and a set of samples. Each sample contains a date and temperature property.
In the second tab, I'm displaying my data in a tableView. I implemented the
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
method in order to delete SampleLists. In my xcdatamodel
the delete rule for my relationship between SampleList and Sample is Cascade
.
My problem is that when I try to delete SampleList I just created, the app crashes and I receive a EXC_BAD_ACCESS
signal. If I restart it, then I'm able to delete "old" sampleList without any problems.
Earlier, I had the following problem : I couldn't display the the sampleLists I created since I launched the app, because it crashed too. I received also the EXC_BAD_ACCESS
signal. Actually, it seemed that the date of the last sample created of the set was nil
. If I am not releasing the NSDate I'm using to set the sample's date, I don't have this problem anymore...
If anyone could help me to find out what could cause my troubles it would be great !!
Here is the method I'm using to create new instances :
SampleList *newSampleList = (SampleList *)[NSEntityDescription insertNewObjectForEntityForName:@"SampleList" inManagedObjectContext:managedObjectContext];
[newSampleList setPatchID:patchID];
NSMutableSet *newSampleSet = [[NSMutableSet alloc] init];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
for (int i = 0; i < [byteArray count]; i=i+4, sampleCount++) { NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setYear:year]; [comps setMonth:month]; [comps setDay:day]; [comps setHour:hours]; [comps setMinute:minutes]; NSDate *sampleDate = [gregorian dateFromComponents:comps];
Sample *newSample = (Sample *)[NSEntityDescription insertNewObjectForEntityForName:@"Sample" inManagedObjectContext:managedObjectContext];
[newSample setSampleDate:sampleDate]; [newSample setSampleTemperature:[NSNumber numberWithInt:temperature]];
[newSampleSet addObject:newSample]; [comps release]; //[sampleDate release]; }
[newSampleList setSampleSet:newSampleSet]; // [newSampleSet release];
NSError *error; if (![managedObjectContext save:&error]) { NSLog(@"Could not Save the context !!"); }
[gregorian release];
edit : I found my mistake. I was doing a comparaison for each sampleDate like this:
NSDate *maxDate = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:0];
(...)
for (int i = 0; i < [byteArray count]; i=i+4, sampleCount++) {
(...)
if ([maxDate compare:sampleDate] == NSOrdredAscending){
max = sampleDate;
}
Where I should have been doing: if ([maxDate compare:sampleDate] == NSOrdredAscending){ [maxDate release]; maxDate = [sampleDate retain]; }