2016-04-25 2 views
0

Я пытаюсь отфильтровывать повторяющиеся элементы в результате результата fetchRequest. Я использую следующий код:NSFetchRequest ReturnsDistinctРезультаты дают пустые результаты

let sortDescriptor = NSSortDescriptor(key: "lastupdate", ascending: false) 
     let sortDescriptors = [sortDescriptor] 

     var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
     var context:NSManagedObjectContext = appDel.managedObjectContext 

     let fetchRequest = NSFetchRequest(entityName:"Details") 
     fetchRequest.sortDescriptors = sortDescriptors 
      fetchRequest.propertiesToFetch = [ "orig_id" ] 
      fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType 
      fetchRequest.returnsDistinctResults = true 


     let company_temp = try context.executeFetchRequest(fetchRequest) 
     let company = company_temp as! [Details] 
     for t in company { 
      let id = t.orig_id 
      print(id) 
      self.myarray.append("\(id)") 

     } 

Когда я закомментируйте эти 3 линии:

fetchRequest.propertiesToFetch = [ "orig_id" ] 
      fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType 
      fetchRequest.returnsDistinctResults = true 

я получаю 8 пунктов в моем массиве. Что не так с моим кодом?

+0

и если вы напечатаете 'company_temp', что вы получаете? и на данный момент вы получаете крах? – Wain

+0

Это пусто, просто '[]' –

ответ

0

Вы сохранили ваш контекст?
У меня была та же проблема. Когда у вас есть несохраненные изменения, NSDictionaryResultType не отражает текущее состояние постоянного хранилища. См. Apple Docs о методе includesPendingChanges:.

Так просто context.save(), прежде чем ваш код может решить вашу проблему.

Другая проблема заключается в том, что эта линия потерпит крах: let company = company_temp as! [Details], так как вы получите Dictionary назад. Не список NSManagedObject.

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