gpt4 book ai didi

objective-c - 如何创建从一个实体到另一个现有实体的核心数据关系?

转载 作者:行者123 更新时间:2023-12-01 19:27:15 25 4
gpt4 key购买 nike

在创建核心数据实体(事件)期间,我正在创建与另一个实体(团队)的关系。这种关系从团队到事件是多对一的(一个团队,许多事件),并且从事件到团队具有反向关系。

团队<----->>事件。

两种关系的删除规则都设置为“无效”。

当在每个事件的创建期间创建一个新团队时,以下代码块在第一次填充时成功运行。但是,如果我随后删除一个事件并尝试重新添加它,则会检索现有的团队,但在示例的最后一行中尝试将团队对象添加到事件时代码会失败。错误如下:-[__NSCFDictionary managedObjectContext]: unrecognized selector sent to instance 0x699ed60
在 Event 对象与已经存在的 Team 对象之间创建关系的正确方法是什么?

Team *currentTeam = self.team;
Team *newTeam = (Team *)[self loadTeamForNid:[NSNumber numberWithInteger: [teamNid integerValue]]];
// If the nid of the referenced team has changed,
if (![[[currentTeam nid] stringValue] isEqualToString:teamNid]) {
currentTeam = nil;
currentTeam = newTeam;
}

// If an event has not been set by this point, it does not exist in the CD store, and we need to create it.
if (currentTeam == nil) {
currentTeam = (Team *)[NSEntityDescription insertNewObjectForEntityForName:@"Team" inManagedObjectContext:[delegate managedObjectContext]];
[currentTeam populateTeamWithNode:[node nodeGet:teamNid]];
}

// TODO: This breaks on reload of an object
// self.team = currentTeam;
[self setValue:currentTeam forKey:@"team"];

最佳答案

从概念上讲,您没有弄错:您将事件的“团队”属性设置为代表适当团队的 NSManagedObject 实例。

这条信息:

-[__NSCFDictionary managedObjectContext]: unrecognized selector sent to instance 0x699ed60

表示某行代码正在处理 NSDictionary 的实例它期望(我假设) NSManagedObject 的实例.当它尝试查询对象的 managedObjectContext ,抛出异常,因为 NSDictionary 没有为该选择器实现方法。

首先要做的是在最后一行设置一个断点,看看是否 currentTeam实际上是变相的NSDictionary。 (这似乎不太可能,因为上面的代码会更早地遇到异常。)如果没有,您将不得不四处寻找可能涉及此代码路径的相关属性。

请注意,Core Data 支持获取请求样式,它返回 NSDictionary 实例而不是 NSManagedObjects;如果您在代码中的任何地方使用它,您可能会不小心将结果传递给另一个意想不到的方法。

关于objective-c - 如何创建从一个实体到另一个现有实体的核心数据关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6444637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com