核心数据仅在使用2个实体时保存一个属性

时间:2013-05-24 06:22:14

标签: iphone ios xcode core-data

我有一个视图,我想保存2个实体的属性值:root beer和comments。这些值具有反比关系,但由于某种原因,仅保存评级值。谁能告诉我什么,如果有的话,我做错了;或者,应该采取不同的做法?

NSManagedObjectContext *context = [self managedObjectContext];
    Comments* com = [NSEntityDescription insertNewObjectForEntityForName:@"Comments" inManagedObjectContext:context];
    RootBeer* rootBeer = [NSEntityDescription insertNewObjectForEntityForName:@"RootBeer" inManagedObjectContext:context];

//save root beer values
[rootBeer setValue:self.rootBeerNameField.text forKey:@"rootBeerName"];
[rootBeer setValue:self.rootBeerBrewerField.text forKey:@"rootBeerBrewer"];
[rootBeer setValue:self.rootBeerLocationField.text forKey:@"rootBeerLocation"];
[rootBeer setValue:self.rootBeerDetailField.text forKey:@"rootBeerDetails"];

//save root beer comments/notes
[com setValue:self.rootBeerNotes.text forKey:@"rootBeerComment"];
[rootBeer setValue:com forKey:@"comments"];
//This is the only value that is being stored
[rootBeer setValue:[NSNumber numberWithFloat:rateView.rate]forKey:@"myRootBeerRating"];

NSError* error = nil;
if(![context save:&error]){
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}


NSLog(@"Saved!");

2 个答案:

答案 0 :(得分:2)

在单步执行此方法时检入调试器。我的猜测是你没有正确地将属性连接到文本字段,或者文本值在那时是零。您直接访问的一个输入视图而不是通过属性(rateView)是唯一有效的视图,这似乎太巧合了。

答案 1 :(得分:1)

我认为评论是一对一的,而rootbeer有一对多的关系。

您无需设置关系的双方。您只需设置一侧,核心数据将为您设置另一侧。

//save root beer comments/notes
[com setValue:self.rootBeerNotes.text forKey:@"rootBeerComment"];

//No need for this
//[rootBeer setValue:com forKey:@"comments"];

改为设置

//Set the one to one of rootBeer to comment 
[com setValue:rootBeer forKey:@"key for root beer"];