Я использую следующий код для создания объекта Session и создания и добавления к нему объектов Exercise and Set.
Но теперь у меня возникает проблема, когда я добавляю упражнение к пользовательской дате (выбраноиз UIDpatePicker, а не из текущей даты), он также автоматически добавляется в сегодняшнюю сессию.Любые идеи?
Я думаю, что это происходит, потому что, когда представление загружается, по умолчанию устанавливается сегодняшняя дата, а затем создается набор, затем, когда вы добавляете набор, он добавляется к пользовательской дате.с сегодняшней датой.
Редактировать: Я думаю, что это потому, что упражнение добавляется к сеансу в том же методе, что и сеанс.Поэтому, хотя у упражнения может не быть набора, у Сессии все еще есть это упражнение
- (void)createSession
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat: @"(timeStamp >= %@ && timeStamp <= %@)", targetDateBegins, targetDateEnds]];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Session" inManagedObjectContext:managedObjectContext]];
NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"Fetch error: %@", error);
if ([results count])
{
session = (Session *)[results objectAtIndex:0];
}
else
{
session = (Session *)[NSEntityDescription insertNewObjectForEntityForName:@"Session" inManagedObjectContext:managedObjectContext];
session.timeStamp = self.picker.date;
}
NSSet *filteredExercisesFromSession=[session.exercises filteredSetUsingPredicate:[NSPredicate predicateWithFormat: @"name == %@",selectedExerciseName]];
if ([filteredExercisesFromSession count] > 0)
{
self.exercise=[filteredExercisesFromSession anyObject];
}
else
{
self.exercise = (Exercise *)[NSEntityDescription insertNewObjectForEntityForName:@"Exercise" inManagedObjectContext:managedObjectContext];
self.exercise.name = selectedExerciseName;
[session addExercisesObject:exercise];
}
[fetchRequest release];
self.fetchedResultsController = nil;
[setsTableView reloadData];
}
-(IBAction)createSet
{
Set *set = (Set *)[NSEntityDescription insertNewObjectForEntityForName:@"Set" inManagedObjectContext:managedObjectContext];
set.weight = [NSNumber numberWithFloat:weightSelected2];
set.reps = [NSNumber numberWithInt:repSelected];
set.timeStamp = self.picker.date;
[self.exercise addSetsObject:set];
NSError *error = nil;
if (![managedObjectContext save:&error])
{
// Handle the error.
}
NSLog(@"error: %@", error);
self.fetchedResultsController = nil;
[setsTableView reloadData];
}
Обновленный код:
- (void)createSession
{
NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *dateComponentsForToday = [calendar components:unitFlags fromDate:self.picker.date];
[dateComponentsForToday setHour:0];
[dateComponentsForToday setMinute:0];
[dateComponentsForToday setSecond:0];
NSDate *targetDateBegins = [calendar dateFromComponents:dateComponentsForToday];
NSDate *targetDateEnds = [targetDateBegins dateByAddingTimeInterval:(60 * 60 * 24 - 1)];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat: @"(timeStamp >= %@ && timeStamp <= %@)", targetDateBegins, targetDateEnds]];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Session" inManagedObjectContext:managedObjectContext]];
NSLog(@"timeStamp >= %@ && timeStamp <= %@", targetDateBegins, targetDateEnds);
NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"Fetch error: %@", error);
if ([results count])
{
session = (Session *)[results objectAtIndex:0];
}
else
{
session = (Session *)[NSEntityDescription insertNewObjectForEntityForName:@"Session" inManagedObjectContext:managedObjectContext];
session.timeStamp = self.picker.date;
}
NSSet *filteredExercisesFromSession = [session.exercises filteredSetUsingPredicate:[NSPredicate predicateWithFormat: @"name == %@",selectedExerciseName]];
if ([filteredExercisesFromSession count] > 0)
{
self.exercise = [filteredExercisesFromSession anyObject];
}
[fetchRequest release];
self.fetchedResultsController = nil;
[setsTableView reloadData];
}
-(IBAction)createSet
{
NSSet *filteredExercisesFromSession = [session.exercises filteredSetUsingPredicate:[NSPredicate predicateWithFormat: @"name == %@",selectedExerciseName]];
if ([filteredExercisesFromSession count] > 0)
{
self.exercise = [filteredExercisesFromSession anyObject];
}
else
{
NSLog(@"exercise does not already exist");
self.exercise = (Exercise *)[NSEntityDescription insertNewObjectForEntityForName:@"Exercise" inManagedObjectContext:managedObjectContext];
self.exercise.name = selectedExerciseName;
self.exercise.muscleGroup = muscleName;
[session addExercisesObject:exercise];
}
Set *set = (Set *)[NSEntityDescription insertNewObjectForEntityForName:@"Set" inManagedObjectContext:managedObjectContext];
set.weight = [NSNumber numberWithFloat:weightSelected2];
set.reps = [NSNumber numberWithInt:repSelected];
set.timeStamp = self.picker.date;
[self.exercise addSetsObject:set];
NSError *error = nil;
if (![managedObjectContext save:&error])
{
// Handle the error.
}
NSLog(@"error: %@", error);
self.fetchedResultsController = nil;
[setsTableView reloadData];
}