Core Data是否允许生成一个语句,例如从Employee而不是整行中选择FirstName,LastName?
在Departments / Employees的示例中,假设我想编写一个导航控制器样式应用程序来显示可用的部门,并在单击时显示该部门中可用的员工。让我们假设Employee对象无论出于何种原因都是巨大的。我不明白为什么我需要在EmployeesViewController中检索一大堆对象,只是为了在列表视图中显示它们的名称。无论如何,我只能为给定部门的所有员工请求名称字段(可能是两个:FirstName,LastName)?
答案 0 :(得分:3)
正如旁注:
注意过早优化的危险。你不应该费心去调试一个fetch,除非你测试过并发现裸骨提取实际上是一个问题。核心数据具有大量的优化功能,使其比乍看之下的效率更高。在大多数情况下,完全不浪费时间来调整提取。
如果你有一个显示数千个对象的表,那么在任何时候你通常只会在内存中有几十个活动对象。默认情况下,Core Data将对象作为错误提取,即对象的重影,而不加载其属性的值。只有当您访问特定对象的特定属性时,该对象才会完全加载到内存中。
如果您来自SQL背景,您可能习惯于必须手动处理从SQL创建的对象。 Core Data可以为您处理所有这些,并且比您手动执行的操作更有效。您直观地假设您开发使用SQL时,您需要做的手动优化程度在应用于Core Data时会有所不同。
相反,首先选择最简单,最简单的方法,只有在 测试 并找到瓶颈时才进行优化。大多数时候,你会发现你对优化的烦恼是完全没有根据的。
答案 1 :(得分:2)
如果您的员工对象非常庞大,并且加载它太昂贵,请考虑使用一对一关系对其进行分区。如果您有以下字段列表:
Employee:
id
name
SSN
DOB
home_address
home_phone
department
office_number
office_phone
manager
job_title
salary_class
start_date
...
你可以将其分解为:
Employee
id
department
manager
...
EmployeePersonalInfo
employee_id
SSN
DOB
home_address
home_phone
EmployeeJobDescription
employee_id
job_title
start_date
salary_class
等等。对于最常见的对象,将获取的数据限制到最相关和最常访问的字段是一种很好的做法。
答案 2 :(得分:1)
是。使用-[NSFetchRequest setPropertiesToFetch:]
。仅适用于iOS 3及更高版本不过,OS X 10.6及更高版本。