【问题标题】:iOS Core Data error - Unacceptable type of value for to-many relationshipiOS 核心数据错误 - 对多关系的值类型不可接受
【发布时间】:2013-04-18 11:49:41
【问题描述】:

我正在为这个问题而烦恼,这似乎应该是一件非常简单的事情。 iOS / Objective C 对我来说是新的,所以也许我只是没有掌握一些基本的东西。

问题是我向我的核心数据模型添加了一个新实体,并建立了一对多的关系。该模型已经有两个具有一对一关系的实体。

Players 实体是新实体。

我有一个 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 实体:

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

team.playerDetails = playerDetails;

我得到了上面的错误。我尝试了以下方法:

[team setPlayerDetails:playerDetails];

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

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

但同样,没有区别 - 它仍然认为它获取的是 Players 类型的对象,而不是 NSSet。

我觉得我只是没有掌握一些简单的东西,所以非常感谢任何帮助!

【问题讨论】:

    标签: ios objective-c core-data


    【解决方案1】:

    playerDetails 是一对多的关系,所以team.playerDetails 的值是玩家的集合,而不是单个玩家对象。您可以使用

    [team addPlayerDetailsObject:playerDetails];
    

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

    playerDetails.team = team;
    

    【讨论】:

    • 太棒了,这是一种享受。我有一种感觉,这将是一件如此简单的事情,我就是无法将手指放在它上面。非常感谢:)
    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多