用 CoreData 编写我的第一个应用程序。我用来指导我的书有这样的代码:
// 'Person' is my managed object class
Person *newPerson = [NSEntityDescription
insertNewObjectForEntityForName:@"Person"
inManagedObjectContext:self.managedObjectContext];
[newPerson setValue:nameField.text forKey:@"name"];
书上说使用属性样式,例如
newPerson.name = nameField.text;
也有效,但是“看到 Core Data 代码使用 KVC 方法是很常见的”
对我来说,我看不到使用 KVC 方法的理由;神奇的字符串只是乞求运行时错误,而且需要输入更多内容。
话虽这么说,但我现在想了解自己的“iPhone 方式”做事习惯。
这些方法有区别吗?如果大多数人使用第一种方法,KVC,为什么?
最佳答案
大多数人不使用我所见过的 KVC 方法;我没有,因为你描述的原因。
为了保持理智,使用 Mogenerator 构建访问器:
http://rentzsch.github.com/mogenerator/
这是一个命令行工具,可以生成代理对象,您可以使用这些代理对象获取 CoreData 对象,使用一些方便的方法 - 但更好的是,一些类别覆盖,您可以添加自己的方法,当您重新访问时不会被破坏从您的数据模型生成类。
XCode 也可以从您的模型生成数据对象,但类更简单(只是访问器),我认为 mogenerator 更容易重复使用(这很重要,因为随着时间的推移,您往往会经常更改模型)。也许下一个 XCode 在这方面会更好。
我通常将所有数据模型类生成到名为“DataObjects”的类下的子目录中 - 然后每次从导致创建新类的数据模型中重新生成类时,您都可以重新添加整个目录(当您有新实体)。示例命令行运行如下所示:
mogenerator -m ../MyProject.xcdatamodeld/MyProject-v1.xcdatamodel
这将从给定的数据模型生成类到当前目录(在这种情况下,我有一个只有第一个版本的版本化模型)。
关于iphone - 使用 KVC/valueForKey 与属性访问 NSManagedObject 字段 - 哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3125536/