ari*_*hie 3 core-data objective-c ios
我正在用这个问题撕掉我的头发,这看起来应该是非常简单的事情.iOS/Objective C对我来说是新的,所以也许我只是没有掌握一些基本的东西.
问题是我在Core Data模型中添加了一个新实体,并建立了一对多的关系.该模型已经有两个具有一对一关系的实体.

玩家实体是新实体.
我有一个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;
Run Code Online (Sandbox Code Playgroud)
所以,在我的Save方法中,我有:
Teams *team = [NSEntityDescription insertNewObjectForEntityForName:@"Teams" inManagedObjectContext:self.managedObjectContext];
TeamDetails *teamdetails = [NSEntityDescription insertNewObjectForEntityForName:@"TeamDetails" inManagedObjectContext:self.managedObjectContext];
team.teamDetails = teamdetails;
Run Code Online (Sandbox Code Playgroud)
然后我继续设置如下属性:
team.teamName = teamNameTextField.text;
team.teamDetails.managerName = managerNameTextField.text;
Run Code Online (Sandbox Code Playgroud)
这一切都没有问题.现在我扩展这个以包含玩家实体:
Players *playerDetails = [NSEntityDescription insertNewObjectForEntityForName:@"Players" inManagedObjectContext:self.managedObjectContext];
team.playerDetails = playerDetails;
Run Code Online (Sandbox Code Playgroud)
我得到上面的错误.我尝试过以下方法:
[team setPlayerDetails:playerDetails];
Run Code Online (Sandbox Code Playgroud)
但这没有任何区别.我也尝试过:
NSSet *playerDetails = [NSEntityDescription insertNewObjectForEntityForName:@"Players" inManagedObjectContext:self.managedObjectContext];
Run Code Online (Sandbox Code Playgroud)
但同样,没有区别 - 它仍然认为它是一个类型玩家而不是NSSet的对象.
我觉得我只是没有抓住简单的东西,所以任何帮助都会非常感激!
Mar*_*n R 10
playerDetails是一个多对多的关系,所以价值team.playerDetails是一组玩家,而不是一个玩家对象.你可以使用
[team addPlayerDetailsObject:playerDetails];
Run Code Online (Sandbox Code Playgroud)
或者更简单地说,使用反向关系:
playerDetails.team = team;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4693 次 |
| 最近记录: |