iphone - 使用 KVC/valueForKey 与属性访问 NSManagedObject 字段 - 哪个更好?

标签 iphone objective-c core-data coding-style

用 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/

相关文章:

iphone - 核心数据 : Setting Entity. 属性、类型问题

ios - 将字符串添加到 NSMutableAttributedString 时出错

iOS SDK : about using properties when creating objects programmatically?

iphone - 从 NSThread 函数调用时,不会调用 NSURLConnection 委托(delegate)

ios - 我可以在 iCloud 上共享 CoreData 吗?

ios - 核心数据多对多关系查询

ios - 如何更改 UINavigationController 背景颜色?

javascript - iPhone 的 Python 到 JavaScript

javascript - iOS UIAutomation 无法访问 TableView

swift - 如何在后台线程中使用新的过滤谓词重新加载 NSFetchedResultsController ?