Database 如何使用swift 3仅获取核心数据中的一列数据

Database 如何使用swift 3仅获取核心数据中的一列数据,database,core-data,swift3,row,Database,Core Data,Swift3,Row,我是CoreData的新手,我尝试只获取一列数据。我正在尝试使用以下代码: //MARK :- Fetch All Calculation func fetchUniqueParentAxis(testID : String) -> [String] { var arrAxis : [String] = [] let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "TesCa

我是CoreData的新手,我尝试只获取一列数据。我正在尝试使用以下代码:

//MARK :- Fetch All Calculation
func fetchUniqueParentAxis(testID : String) -> [String]  {

    var arrAxis : [String] = []

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "TesCalculation")
    fetchRequest.predicate = NSPredicate(format: "testID == %@ ",testID)
    fetchRequest.includesPropertyValues = true
    fetchRequest.returnsObjectsAsFaults = false
    fetchRequest.propertiesToFetch = ["parentAxis"]

    do {
         calculation = try AppDelegate.getContext().fetch(fetchRequest) as! [TesCalculation]//try AppDelegate.getContext().fetch(fetchRequest) as! [String : AnyObject]
    }

    catch let error {
        //Handle Error
        Helper.sharedInstance.Print(error as AnyObject)
    }
 }. 
//标记:-获取所有计算
func fetchUniqueParentAxis(testID:String)->[String]{
变量arrAxis:[字符串]=[]
let fetchRequest=NSFetchRequest(entityName:“TesCalculation”)
fetchRequest.predicate=NSPredicate(格式:“testID==%@”,testID)
fetchRequest.IncludePropertyValues=true
fetchRequest.returnsObjectsAsFaults=false
fetchRequest.propertiesToFetch=[“父轴”]
做{
calculation=尝试AppDelegate.getContext().fetch(fetchRequest)as![TesCalculation]//尝试AppDelegate.getContext().fetchRequest(fetchRequest)as![String:AnyObject]
}
捕捉错误{
//处理错误
Helper.sharedInstance.Print(错误为AnyObject)
}
}. 

“parentAxis”是我的a列,我只想获取该列的数据。

核心数据是一个对象模型。它将sql数据库的行转换为具有属性的对象。您没有直接在SQL上运行查询,因此无法在核心数据中执行SQL可以执行的所有操作。您可以与与数据库交互的对象交互。在核心数据中,可以有一个没有故障的对象。这意味着它的任何属性都不会加载到内存中,但是当您需要它们时(当您访问属性时),它会从数据库中获取它们。不能使对象只设置了其某些属性。它们要么全部设置(即出现故障),要么未设置(未出现故障)


在大多数情况下,仅获取一列或两列并没有什么好处。额外的数据传输通常是最小的。唯一的例外是当对象上有大量数据作为属性时。在这种情况下,应该将blob存储在单独的实体上,并为其提供一对一的关系。这样,昂贵的数据块在被请求之前不会加载到内存中。

您完全可以在CoreData中获取列的子集。是的,我同意核心数据是一种对象图解决方案,可以使用SQLite作为存储引擎。然而,在CoreData中获取数据子集而不是整个
NSManagedObject
已经有很长一段时间了,但最近的更改使其与以前略有不同

let fetchRequest = NSFetchRequest<NSDictionary>(entityName: TesCalculation.entity().name!)
fetchRequest.resultType = .dictionaryResultType
fetchRequest.predicate = NSPredicate(format: "testID == %@ ",testID)
fetchRequest.propertiesToFetch = ["parentAxis"]
do {
    let results = try AppDelegate.getContext().fetch(fetchRequest)
} catch let error as NSError {
    print(error)
}
问题不在于性能提高(尽管可能有;我真的不知道!),而在于是否/如何做到这一点,以及如何做到这一点。另外,我不同意其他说法,即“没有对象就拥有一个属性是没有意义的。”在很多情况下,您分配的对象只需要一个或两个属性即可满足需要。如果您在多个存储之间松散耦合实体,这也很方便。当然,也有其他方法(xcdatamodel的
获取属性
),因此它实际上取决于用例

只是为了表明它已经存在了一段时间,它位于
NSFetchRequestResultType
下的
NSFetchRequestResultType
的标题中:

@available(iOS 3.0, *)
public static var dictionaryResultType: NSFetchRequestResultType { get }

那么,在核心数据中,有没有其他方法可以通过column获取,列是一个属性,行是一个对象。没有对象的属性是没有意义的。谢谢你的解释。@kishor0011:看起来这是对你问题的完整回答。你能考虑接受吗?请帮我回答这个问题。
@available(iOS 3.0, *)
public static var dictionaryResultType: NSFetchRequestResultType { get }