核心数据获取仅具有唯一属性的实体

时间:2016-05-12 11:00:27

标签: xcode swift core-data

我有一个具有以下属性的实体“人物”:

-name
-surname
-age

我创建了多个对象:

(Ben,Black,18)
(约翰·史密斯,19)
(伊凡,Borzov,18)
(DEN,巴兰,20)
(肯特,Broman,20)

如何接收数组或任何其他方式来构建仅具有唯一年龄的表[18,19,20]

请在Swift中提供答案。

P.S。当然我可以获取所有对象,并手动搜索唯一,但我希望有更好的解决方案)

谢谢!

2 个答案:

答案 0 :(得分:5)

您可以同时使用NSFetchRequest的propertiesToFetchreturnsDistinctResults属性来获取所有实体的不同年龄结果。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSFetchRequest_Class/#//apple_ref/occ/instp/NSFetchRequest/propertiesToFetch

let fetchRequest = NSFetchRequest(entityName: "Person")
fetchRequest.resultType = .DictionaryResultType
fetchRequest.propertiesToFetch = ["age"]
fetchRequest.returnsDistinctResults = true
let result = try! managedObjectContext.executeFetchRequest(fetchRequest)

答案 1 :(得分:0)

您可以检索以下代码之类的年龄,在视图中调用此功能,

var getAllLogObj = [NSManagedObject]()
var allLogsArray : NSMutableArray = NSMutableArray()

func getAllLogs()
{
    let appDelegate =
    UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext

    let fetchRequest = NSFetchRequest(entityName:"Person")

    var fetchedResults = [NSManagedObject]()

    let _ : NSError! = nil
    do {
        fetchedResults = try managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]
        getAllLogObj = fetchedResults

    } catch {
        print("Fetching error : \(error)")
    }

    if(getAllLogObj.count > 0)
    {
        self.allLogsArray.removeAllObjects()
        self.allLogsArray = NSMutableArray()

        for(var i : Int = 0; i < getAllLogObj.count; i++)
        {
            let ageString = getAllLogObj[i].valueForKey("age") as? NSString
            self.allLogsArray.addObject(ageString)
        }

    }
    self.tblComplaintList.reloadData()
}

它在我的工作正常。希望这对你也有帮助。