2016-05-12 175 views
3

我有一個實體 「人」 有以下屬性:核心數據獲取的實體,只有獨特的屬性

-name
-surname
- 年齡

我創建的對象的數量:

(Ben,              18)
(John,   史密斯,        19)
(伊凡,      Borzov,      18)
(DEN,     巴蘭,          20)
(肯特,    Broman,     20)

如何rec eive數組或任何其他方式構建僅具有獨特年齡的表[18,19,20]

請在Swift中提供答案。

P.S.當然我可以取所有對象,並手動搜索唯一,但我希望能有更好的解決方案)

謝謝!

回答

3

您可以通過propertiesToFetchreturnsDistinctResults NSFetchRequest的屬性在所有實體中獲得不同的年齡結果。

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) 
+0

你會如此友善地提供一個基於我的數據的例子嗎? –

+0

謝謝,它的工作! –

+0

不客氣。 –

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() 
} 

其工作的罰款。希望這對你也有幫助。

+0

這正是「手動搜索」 –

0

謝謝你的回答,但是這正是我所說的「手動搜索」我做了它甚至有點簡單:

let fetchRequest = NSFetchRequest(entityName: "Person") 
do { 
    let results = try managedContext.executeFetchRequest(fetchRequest) 
    persons = results as! [Person] 
} catch let error as NSError { 
    print("Could not fetch \(error), \(error.userInfo)") 
} 

var temporaryArray = [String]() 
for person in persons { 
    if let age = person.age { 
    temporaryArray.append(age) 
    } 
} 
ages = Array(Set(temporaryArray)) 
+0

是的,這是必須是簡單的,因爲你需要做..! –

+0

分享您定義的所有變量 –