【发布时间】:2014-03-25 17:40:21
【问题描述】:
我无法获取 1-1 关系实体属性的结果?
背景信息
我有三个UITableViewControllers,祖父 TVC 有 10 个单元格,第 1 天,第 2 天..第 10 天。父亲 TVC 有 3 个单元格,锻炼 1,锻炼 2,锻炼 3。而在孩子 TVC I设置每个锻炼的属性及其“workoutscore”。所以每天Cell在segue之后有3个训练单元。
Workout1、Workout2、Workout3 各有一个 workoutscore attribute。我想在锻炼单元格上显示锻炼分数。
所以我有一个Day Entity、一个one-one relationship、一个Workout1 Entity、一个Workout2 Entity和Workout 3 Entity。
Day <---> Workout1 Day<----->Workout2 Day<---->Workout3
从子级返回到父级后,我正确传递了 workoutscore 并将上下文保存在父级中。 WorkOut 单元格上的标签正确显示workoutscore。
当然,当我导航回祖父 TVC 并返回父 TVC deallocs 时,我想根据祖父 TVC 的日子获取以前的分数。
正在保存出现在 VIEWDIDAPPEAR(这是正确的)
在父 TVC (注意:我只显示一个锻炼的代码,因为它与其他 2 个相同)
AppDelegate *ad = [[UIApplication sharedApplication] delegate];
Day *myDay = [NSEntityDescription insertNewObjectForEntityForName:@"Day"
inManagedObjectContext:ad.managedObjectContext];
Workout1 *myWorkout1 = [NSEntityDescription insertNewObjectForEntityForName:@"Workout1"
inManagedObjectContext:ad.managedObjectContext];
NSNumber *theNumber = myWorkout1.workoutscore; //get old score
theNumber = [self updateNumber:theNumber forIndex: 11];
myWorkout1.workoutscore = theNumber; //update for new score
[myDay setWorkout1:myWorkout1]; //set Workout Entity to day Entity
NSError *savingError = nil;
myDay.dayname = [NSString stringWithString:self.dayname];
[ad.managedObjectContext save:&savingError];
}
FETCHING 出现在 VIEWDIDLOAD 中(这是不正确的,这里有些东西不起作用)
在父 TVC (注意:我只显示一个锻炼的代码,因为它与其他 2 个相同)
AppDelegate *ad = [[UIApplication sharedApplication] delegate];
Day *day = [NSEntityDescription insertNewObjectForEntityForName:@"Day"
inManagedObjectContext:ad.managedObjectContext];
Workout1 *myWorkout1 = [NSEntityDescription insertNewObjectForEntityForName:@"Workout1"
inManagedObjectContext:ad.managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Workout1" inManagedObjectContext:ad.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects:@"Day",nil]];
[fetchRequest setIncludesSubentities:YES];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"day.daynumber contains %@", self.dayLabel.text]; //self.dayLabel.text is Day# in string form.
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedObjects = [ad.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
NSLog(@"Nothing was fetched");
}
NSLog(@"number of fetched objects is %lu", (unsigned long)[fetchedObjects count]);
myWorkout1 = [fetchedObjects lastObject]; //most recent update of score
if ([fetchedObjects count] > 0) {
stringWS1 = [[NSMutableString alloc] init];
stringWS1 = [NSMutableString stringWithFormat:@"%@",myWorkout1.workoutscore];
self.workoutScoreLabel1.text = [NSMutableString stringWithString:stringWS1]; //Put score on label
在[fetchedObjects count] > 0 的 If 语句之前,我得到的只是标签上的 (null)。现在我什么也没得到,因为数组 == 0。但我保存正确吗?。
【问题讨论】:
标签: ios core-data entity-relationship one-to-one