【发布时间】:2010-11-13 00:06:50
【问题描述】:
我真的被这两件事困住了。
我想做什么:
- 我的实体很简单。这是一个“记录”。
- 它有一个“名称(NSString)”和“父级(relationShip)”
- “父”连接到自身,实体“记录”。
好的,现在我要创建“parentRecord”和“simpleRecord”。
我尝试使用该代码:
groupRecord = (record *)[NSEntityDescription insertNewObjectForEntityForName:@"record"
inManagedObjectContext:self.managedObjectContext];
groupRecord.name = GroupTextField.text;
[self saveContext];
它是“parentRecord”,我将其保存以备将来使用,并捕获在“groupRecord”变量中。
现在我必须创建一个“simpleRecord”。这是一个代码:
record *newRecord = (record *)[NSEntityDescription
insertNewObjectForEntityForName:@"record"
inManagedObjectContext:self.managedObjectContext];
newRecord.name = textField.text;
[newRecord setMyParent:groupRecord]; //and it crashes here!
我重新排列了这段代码,所以 *我没有在“parentRecord”中使用[self saveContext]; *。
只需从变量groupRecord 中使用它。并将其保存在“childRecord”块中。那么一切都很好。记录保存到存储中,我可以从那里读取它。
为什么会这样?如果我想先创建“parentRecord”,保存它,然后 - “childRecord”,我应该怎么做?
为什么我不能使用以前保存的对象? NSManagedObjectContext 是一样的 - 怎么了?
“经典”SQL 我已经足够好了,但 Core Data 正在扼杀我的大脑。
谢谢大家。
更新:
看,saveContext 已经没有崩溃的理由了。这里是:
- 创建父实体。
- 将其设置为 appDelegate 的变量。
- 保存上下文(为父母)。
- 创建子实体。
- 从 appDelegate 的变量中设置 parentProperty。应用崩溃!
还有:
- 创建父实体。
- 将其设置为 appDelegate 的变量。
- ///////////保存上下文(为父母)。
- 创建子实体。
- 从 appDelegate 的变量中设置 parentProperty。没有任何崩溃。
- 这次保存上下文。
- 现在一切都很好。
父属性 - 只是属性的名称。这不是 MOM 文件中父级的一些额外设置。
我想做具有层次结构的实体。 并且没有 Xcode 为我创建的其他方法 - 只是一个属性。
【问题讨论】:
-
崩溃发生时你会得到什么样的错误信息或堆栈跟踪?
-
@Monochromatique:Warrenm 的建议很重要。你应该遵循它。在不知道什么样的崩溃/错误以及它发生在哪里的情况下,您要求我们花时间进行我们大多数人不会做的疯狂猜测。做好功课。
-
OK...我在网上红了一些信息,做一些尝试..
-
那么,我现在得到了什么。首先 - 在建立任何关系之前,我必须将任何对象添加到 NSManagedObjectContext。当我创建一个 groupRecord - 我已经保存了它。所以我的 NSManagedObjectContext 变得干净了。并且应用程序在“newChildRecord.myParent = groupRecord”上崩溃了
-
但是,如果我在前面添加一行 - "[self.managedObjectContext insertObject:groupRecord];"那么一切都很好。嗯...我找到了一个原因,但仍然无法理解 NSManagedObjectContext 的作用。
标签: iphone cocoa core-data nsmanagedobjectcontext