몇 가지 문제의 주위에 내 머리를 점점 많은 관계로 하나가 핵심 데이터 모델에 데이터를 추가하는 데에 하나의 데이터를 추가.많은 핵심 데이터 모델
RecordDate - Relationship: records - One to Many with RecordWorkout.
RecordWorkout - Relationship: recExercises - One to Many With RecordExercise.
RecordExercise - Relationship: sets - One to Many With RecordSet.
RecordSet
RecordDate는 하나의 문자열 변수에 날짜를 원하는 분야
다음은 내 모델입니다.
RecordWorkout는 하나의 문자열 변수 recWorkoutName을 보유 (날짜의 중복 변수를 저장할 수 없음). (recWorkoutName의 중복 없음 변수가 저장 될 수 없다.)
RecordExercise 단일 변수 recExerciseName 문자열을 보유하고있다. ... (또한 recExerciseName의 중복 변수는 다시 중복 변수는 setLog 변수에 저장 될 수 없다()
는레코드 세 개의 문자열 변수 (setLog, 무게, 담당자를 보유하고 저장되지 코드의
목표 수 있습니다
목적이 버튼을 클릭하면 버튼 클릭 (버튼 로그)이다, 코드가 너무 중복 값이 저장되지 않습니다 데이터 저장소에 이미 값으로 화면에 값을 비교해야
예. :
날짜> workoutName> 운동> (많은 세트 예컨대 : SET1, SET2, SET3, SET4) 버튼 날짜의 첫 번째 클릭에서
, workoutName exerciseName 첫 번째 세트의 세부 사항이 저장됩니다. 두 번째 클릭시 새 설정 데이터 만 저장됩니다. 다음은
내가 사용하고있는 코드이지만, 모든 설정 값을 저장하지 않는 것, 일부 세트는 데이터 저장소에서 놓친 얻을하거나 첫 세트가 저장된다.setCount = setCount + 1;
NSString *weight = weightTextField.text;
NSString *reps = repsTextField.text;
NSString *setStr = [NSString stringWithFormat:@"%d", (int)setCount];
NSMutableString *log = [NSMutableString stringWithFormat:@"%@ %@%@ %@ %@ %@ %@", @"Set", setStr, @":", weight, @"kg X", reps, @"reps"];
[self.tempLog addObject:log];
[self.myTableView reloadData];
[weightTextField resignFirstResponder];
[repsTextField resignFirstResponder];
//the set is stored in a temporary mutable array (tempLog) just to show in tableview
//i would rather just store it in the actual entity and fetch from there
//Entities are initialised below
NSEntityDescription *recordDateEntity = [NSEntityDescription entityForName:@"RecordDate"
inManagedObjectContext:self.managedObjectContext];
NSEntityDescription *recordWorkoutEntity = [NSEntityDescription entityForName:@"RecordWorkout"
inManagedObjectContext:self.managedObjectContext];
NSEntityDescription *recordExerciseEntity = [NSEntityDescription entityForName:@"RecordExercise"
inManagedObjectContext:self.managedObjectContext];
NSEntityDescription *recordSetEntity = [NSEntityDescription entityForName:@"RecordSet" inManagedObjectContext:self.managedObjectContext];
//Data is fetched from the existing store to be compared with the data on screen
//This data is stored in mutable arrays (record date, recordworkouts, recordexercises, recordsets)
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"RecordDate"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"date == %@", dateLabel.text];
[fetchRequest setPredicate:predicate];
self.recorddates = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
NSFetchRequest *fetchRWRequest = [[NSFetchRequest alloc] initWithEntityName:@"RecordWorkout"];
NSPredicate *predicateRW = [NSPredicate predicateWithFormat:@"recWorkoutName == %@", testLabel2.text];
[fetchRWRequest setPredicate:predicateRW];
self.recordworkouts = [[managedObjectContext executeFetchRequest:fetchRWRequest error:nil] mutableCopy];
NSFetchRequest *fetchRERequest = [[NSFetchRequest alloc] initWithEntityName:@"RecordExercise"];
NSPredicate *predicateRE = [NSPredicate predicateWithFormat:@"recExerciseName == %@", exNameLabel.text];
[fetchRERequest setPredicate:predicateRE];
self.recordexercises = [[managedObjectContext executeFetchRequest:fetchRERequest error:nil] mutableCopy];
NSFetchRequest *fetchRSetRequest = [[NSFetchRequest alloc] initWithEntityName:@"RecordSet"];
NSPredicate *predicateRSet = [NSPredicate predicateWithFormat:@"setLog == %@", setStr];
[fetchRSetRequest setPredicate:predicateRSet];
self.recordsets = [[managedObjectContext executeFetchRequest:fetchRSetRequest error:nil] mutableCopy];
if ([self.recorddates count] == 0) {
NSLog(@"No Dates Imported");
RecordDate *newRecordDate = (RecordDate *)[[NSManagedObject alloc]
initWithEntity:recordDateEntity
insertIntoManagedObjectContext:self.managedObjectContext];
newRecordDate.date = dateLabel.text;
RecordWorkout *newRecordWorkout = (RecordWorkout *)[[NSManagedObject alloc]
initWithEntity:recordWorkoutEntity
insertIntoManagedObjectContext:self.managedObjectContext];
newRecordWorkout.recWorkoutName = testLabel2.text;
[newRecordDate addRecordsObject:newRecordWorkout];
RecordExercise *newRecordExercise = (RecordExercise *)[[NSManagedObject alloc] initWithEntity:recordExerciseEntity insertIntoManagedObjectContext:self.managedObjectContext];
newRecordExercise.recExerciseName = exNameLabel.text;
[newRecordWorkout addRecExercisesObject:newRecordExercise];
RecordSet *newRecordSet = (RecordSet *)[[NSManagedObject alloc]
initWithEntity:recordSetEntity
insertIntoManagedObjectContext:self.managedObjectContext];
newRecordSet.setLog = setStr;
newRecordSet.weight = weight;
newRecordSet.reps = reps;
[newRecordExercise addSetsObject:newRecordSet];
NSLog(@"Set number one should be added to model: %@", setStr);
} else {
NSLog(@"Dates Are Imported");
RecordDate *prevRecordDate = (RecordDate *)[self.recorddates objectAtIndex:0];
if ([self.recordworkouts count] == 0) {
RecordWorkout *newRecordWorkout = (RecordWorkout *)[[NSManagedObject alloc]
initWithEntity:recordWorkoutEntity
insertIntoManagedObjectContext:self.managedObjectContext];
newRecordWorkout.recWorkoutName = testLabel2.text;
[prevRecordDate addRecordsObject:newRecordWorkout];
RecordExercise *newRecordExercise = (RecordExercise *)[[NSManagedObject alloc] initWithEntity:recordExerciseEntity insertIntoManagedObjectContext:self.managedObjectContext];
newRecordExercise.recExerciseName = exNameLabel.text;
[newRecordWorkout addRecExercisesObject:newRecordExercise];
RecordSet *newRecordSet = (RecordSet *)[[NSManagedObject alloc]
initWithEntity:recordSetEntity
insertIntoManagedObjectContext:self.managedObjectContext];
newRecordSet.setLog = setStr;
newRecordSet.weight = weight;
newRecordSet.reps = reps;
[newRecordExercise addSetsObject:newRecordSet];
} else {
RecordWorkout *prevRecordWorkout = [self.recordworkouts objectAtIndex:0];
if ([self.recordexercises count] == 0) {
RecordExercise *newRecordExercise = (RecordExercise *)[[NSManagedObject alloc] initWithEntity:recordExerciseEntity insertIntoManagedObjectContext:self.managedObjectContext];
newRecordExercise.recExerciseName = exNameLabel.text;
[prevRecordWorkout addRecExercisesObject:newRecordExercise];
RecordSet *newRecordSet = (RecordSet *)[[NSManagedObject alloc]
initWithEntity:recordSetEntity
insertIntoManagedObjectContext:self.managedObjectContext];
newRecordSet.setLog = setStr;
newRecordSet.weight = weight;
newRecordSet.reps = reps;
[newRecordExercise addSetsObject:newRecordSet];
} else {
RecordExercise *prevRecordExercise = [self.recordexercises objectAtIndex:0];
if ([self.recordsets count] == 0) {
RecordSet *newRecordSet = (RecordSet *)[[NSManagedObject alloc]
initWithEntity:recordSetEntity
insertIntoManagedObjectContext:self.managedObjectContext];
newRecordSet.setLog = setStr;
newRecordSet.weight = weight;
newRecordSet.reps = reps;
[prevRecordExercise addSetsObject:newRecordSet];
} else {
NSLog(@"Sets Already Imported");
}
}
}
NSError *errr;
if (![self.managedObjectContext save:&errr])
{
NSLog(@"Error saving context: %@", errr);
}
}
나는 내가 훨씬 더 나은 조직 코드를 사용 후 나는 무엇을 달성 할 수있는 느낌을 받았습니다.
도움을 주셔서 감사합니다.
ps. 위의 코드는 그것은 훨씬 더 간단 할 수 logButtonPressed 방법
작동하지 않는 기능은 무엇입니까? – Mundi
모든 설정 값을 저장하지 않습니다. 예를 들어 1 - 10에서 10 세트를 저장하는 경우입니다. 일부 설정 값은 저장되지 않습니다. – user2512523