我真的被这两件事困住了。
我正在尝试做的事情:
- 我的实体很简单。这是一个“记录”。
- 它有一个“名称(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!
我重新排列了这段代码,所以 *我不在[self saveContext];
“parentRecord”中做* 。只需从变量中使用它groupRecord
。并将其保存在“childRecord”块中。那么一切都很好。记录保存到存储中,我可以从那里读取它。
为什么会发生?如果我想先创建“parentRecord”,保存它,然后 - “childRecord”,我应该怎么做?
为什么我不能使用以前保存的对象?NSManagedObjectContext 是一样的——怎么了?
我对“经典”SQL 已经足够好,但 Core Data 正在扼杀我的大脑。
谢谢大家。
更新:
看,saveContext 没有崩溃的理由。这是:
- 创建父实体。
- 将其设置为 appDelegate 的变量。
- 保存上下文(对于父母)。
- 创建子实体。
- 从 appDelegate 的变量设置 parentProperty。应用程序崩溃!
和:
- 创建父实体。
- 将其设置为 appDelegate 的变量。
- ///////////保存上下文(为父级)。
- 创建子实体。
- 从 appDelegate 的变量设置 parentProperty。没有任何崩溃。
- 这次保存上下文。
- 现在一切都很好。
父属性 - 只是属性的名称。这不是 MOM 文件中父级的一些额外设置。
我想做具有层次结构的实体。并且没有 Xcode 为我创建的其他方法 - 只是一个属性。