iOS核心数据错误 - 多对多关系的值不可接受

时间:2013-04-18 11:49:41

标签: ios objective-c core-data

我正在用这个问题撕掉我的头发,这似乎应该是非常简单的事情。 iOS / Objective C对我来说是新的,所以也许我只是没有把握一些基本的东西。

问题在于我在Core Data模型中添加了一个新实体,并建立了一对多的关系。该模型已经有两个具有一对一关系的实体。

Core Data Model

玩家实体是新实体。

我有一个UITableViewController,我将保存到UITextFields的属性。这适用于Teams / TeamDetails的原始配置,但是当我将Players实体添加到代码时,它会因以下错误而崩溃:

Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason:   'Unacceptable type of value for to-many relationship: 
property = "playerDetails"; desired type = NSSet; given type = Players;

所以,在我的Save方法中,我有:

Teams *team = [NSEntityDescription insertNewObjectForEntityForName:@"Teams" inManagedObjectContext:self.managedObjectContext];
TeamDetails *teamdetails = [NSEntityDescription insertNewObjectForEntityForName:@"TeamDetails" inManagedObjectContext:self.managedObjectContext];

team.teamDetails = teamdetails;

然后我继续设置如下属性:

team.teamName = teamNameTextField.text;
team.teamDetails.managerName = managerNameTextField.text;

哪一切都没有问题。现在我将其扩展为包含玩家实体:

Players *playerDetails = [NSEntityDescription insertNewObjectForEntityForName:@"Players" inManagedObjectContext:self.managedObjectContext];

team.playerDetails = playerDetails;

我得到上面的错误。我尝试了以下内容:

[team setPlayerDetails:playerDetails];

但这没有任何区别。我也尝试过:

NSSet *playerDetails = [NSEntityDescription insertNewObjectForEntityForName:@"Players" inManagedObjectContext:self.managedObjectContext];

但同样,没有区别 - 它仍然认为它正在获得玩家类型的对象而不是NSSet。

我觉得我只是没有抓住简单的东西,所以任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:10)

playerDetails是一种多对多关系,因此team.playerDetails的值是玩家的,而不是单个玩家对象。你可以使用

[team addPlayerDetailsObject:playerDetails];

或更简单地说,使用反比关系:

playerDetails.team = team;