2016-05-12 3 views
3

У меня есть Entity "Person" со следующими атрибутами:основных данных выборки объектов только с уникальными атрибутами

-name
-surname
-Возраст

Я создал количество объектов:

(Бен,       Факс:       18)
(John,     Смит,         19)
(Иван,       Борзов,       18)
(Ден,       Балан,           20)
(Кент,     Броман,     20)

Как сделать eive или любой другой способ построения таблицы с уникальными возрастами [18,19,20]

Просьба предоставить ответ в Swift.

P.S. Конечно, я могу получить все объекты и искать уникальные вручную, но я надеюсь на лучшее решение)

Спасибо!

ответ

3

Вы можете как propertiesToFetch, так и returnsDistinctResults свойства 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

делить все: от определения переменных, которые вы определили –

Смежные вопросы