为啥有些实体 NSManagedObjects 和一些以其类命名?
Posted
技术标签:
【中文标题】为啥有些实体 NSManagedObjects 和一些以其类命名?【英文标题】:Why are some entities NSManagedObjects and some named after their class?为什么有些实体 NSManagedObjects 和一些以其类命名? 【发布时间】:2010-10-18 10:38:14 【问题描述】:我注意到,在我的 Core Data 数据模型中,一些实体(在左上角面板中)有一个“NSManagedObject”类,一些实体以一个类(Person、Company 等)命名。实体是否具有 Person 等的 NSManagedObject 类似乎没有任何逻辑。而且我的代码似乎工作正常。所以我想知道为什么会有差异?
编辑
感谢 Benedict Cohen 让事情变得更加清晰。 这是我当前的代码:
Person *per = (Person *)[NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:managedObjectContext];
[per setName:@"Steve Jobs"];
..无论数据模型中是否明确提及自定义类,这都有效。但我仍然需要自定义类。我做错了吗?我想知道我是否可以简化我的代码。自定义类是通过选择实体并转到“新文件 - 托管对象类”来创建的。但我认为当我更改它们时链接可能已损坏。
【问题讨论】:
逻辑是:你创造了它,现在你拥有了它。除非您创建了自定义类,否则不会使用自定义类。 你不需要转换insertNewObjectForEntityForName:
的返回值,因为返回类型是id
,而不是NSManagedObject
。当类型为 id
时,编译器假定您知道自己在做什么,并且不会发出任何警告。
【参考方案1】:
最好为每个实体创建一个类,但这不是必需的。通过为实体创建一个类,可以使用属性而不是setValue:forKey:
例如:
person.name = @"Harry Hippy"; //this is good
[person setValue:@"Harry Hippy" forKey:@"naem"]; //this is bad. The compiler won't notice the typo and will result in a run-time error
只要Person
需要做的不仅仅是存储数据,您就必须创建一个类。
【讨论】:
谢谢。我已经更新了我的问题。看起来我需要一个自定义类,因为我将它转换为自定义类? .. 另外,您能否举例说明托管对象自定义类除了存储数据之外还需要做什么......? 例如,如果您尝试保存少于 2 个字符的名称,您可以实现一个显示消息的函数。以上是关于为啥有些实体 NSManagedObjects 和一些以其类命名?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 XCode 调试器中调试 NSManagedObjects?
将排序的 NSManagedObjects 重新分配给 NSSet
序列化包含对核心数据中 NSManagedObjects 的引用的多维数组
如何将其他 NSManagedObjects 存储为 NSManagedObject 的属性